using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; namespace DockerFileBuildHelper { public class Image { public string User { get; private set; } public string Name { get; private set; } public string Tag { get; private set; } public string DockerHubLink { get { return User == string.Empty ? $"https://hub.docker.com/_/{Name}" : $"https://hub.docker.com/r/{User}/{Name}"; } } public string Source { get; set; } public static Image Parse(string str) { //${BTCPAY_IMAGE: -btcpayserver / btcpayserver:1.0.3.21} var variableMatch = Regex.Match(str, @"\$\{[^-]+-([^\}]+)\}"); if (variableMatch.Success) { str = variableMatch.Groups[1].Value; } Image img = new Image(); var match = Regex.Match(str, "([^/]*/)?([^:]+):?(.*)"); if (!match.Success) throw new FormatException(); img.User = match.Groups[1].Length == 0 ? string.Empty : match.Groups[1].Value.Substring(0, match.Groups[1].Value.Length - 1); img.Name = match.Groups[2].Value; img.Tag = match.Groups[3].Value; if (img.Tag == string.Empty) img.Tag = "latest"; return img; } public override string ToString() { return ToString(true); } public string ToString(bool includeTag) { StringBuilder builder = new StringBuilder(); if (!String.IsNullOrWhiteSpace(User)) builder.Append($"{User}/"); builder.Append($"{Name}"); if (includeTag) { if (!String.IsNullOrWhiteSpace(Tag)) builder.Append($":{Tag}"); } return builder.ToString(); } } }