RSCG–AMS – About My software –work– part 2

So now it is time to work at implementation This will be a standard RSCG –  generating code. I make also a test console to display the values.

The implementation will consider the fact that we can have many Source Control providers – each one with his ideas about variables. So I made 2 classes – one base abstract

abstract class AMS
{
    public AMS(GeneratorExecutionContext  context)
    {
        AssemblyName = context.Compilation.AssemblyName;
        GeneratedDate = DateTime.UtcNow;

    }
    public string AssemblyName { get; internal set; }
    public DateTime GeneratedDate { get; internal set; }

    public string CommitId { get; internal set; }
    public string RepoUrl { get; internal set; }
}

and one implementation for Github

//https://docs.github.com/en/actions/reference/environment-variables
class AMSGitHub : AMS
{
    public AMSGitHub(GeneratorExecutionContext  context):base(context)
    {
        CommitId = Environment.GetEnvironmentVariable("GITHUB_SHA");
        RepoUrl = Environment.GetEnvironmentVariable("GITHUB_SERVER_URL") + "/" + Environment.GetEnvironmentVariable("GITHUB_REPOSITORY");
    }
}

The code for generator is a bit more complicated:

var nameSpace = "AMS";            
var ams = new AMSGitHub(context);
var classDef=$@"
using System;
namespace {nameSpace} {{ 
public class AboutMySoftware{{
public string AssemblyName {{ get {{ return  ""{ams.AssemblyName}"" ; }} }}
public DateTime DateGenerated {{ get {{ return DateTime.ParseExact(""{ams.GeneratedDate.ToString("yyyyMMddHHmmss")}"", ""yyyyMMddHHmmss"", null); }} }}
public string CommitId  {{ get {{ return  ""{ams.CommitId}"" ; }}}}
public string RepoUrl {{ get {{ return  ""{ams.RepoUrl}"" ; }}}}
}}
        
}}";

The console to test has the following code

static void Main(string[] args)
{
    Console.WriteLine("Show About My Software versions");
    var ams = new AboutMySoftware();
    Console.WriteLine($"{nameof(ams.AssemblyName)} : {ams.AssemblyName}");
    Console.WriteLine($"{nameof(ams.DateGenerated)} : {ams.DateGenerated}");
    Console.WriteLine($"{nameof(ams.CommitId)} : {ams.CommitId}");
    Console.WriteLine($"{nameof(ams.RepoUrl)} : {ams.RepoUrl}");
}

and the output , in GitHub actions , is

Show About My Software versions
AssemblyName : AMSConsole
DateGenerated : 06/24/2021 03:16:51
CommitId : d8cb041470d93f68a4dc7fca7d131c207db8ab69
RepoUrl : https://github.com/ignatandrei/RSCG_AMS