|
| 1 | +package main |
| 2 | + |
| 3 | +import ( |
| 4 | +"fmt" |
| 5 | +"os" |
| 6 | + |
| 7 | +"github.com/blang/semver" |
| 8 | +"github.com/robfig/cron" |
| 9 | +"github.com/sirupsen/logrus" |
| 10 | +) |
| 11 | + |
| 12 | +var latestVersionProceeded map[string]string |
| 13 | + |
| 14 | +func main() { |
| 15 | +latestVersionProceeded = map[string]string{} |
| 16 | +checkVersion() |
| 17 | +c := cron.New() |
| 18 | +c.AddFunc("@every 5m", func() { checkVersion() }) |
| 19 | +c.Run() |
| 20 | +} |
| 21 | + |
| 22 | +func checkVersion() { |
| 23 | +version, err := GetAvailableVersions() |
| 24 | +if err != nil { |
| 25 | +logrus.Panic(err) |
| 26 | +} |
| 27 | + |
| 28 | +// Get all available versions |
| 29 | +versions := semver.Versions{} |
| 30 | +for _, version := range version.CoreLinuxHeadless64 { |
| 31 | +if version.To == "" { |
| 32 | +continue |
| 33 | +} |
| 34 | +v, err := semver.Make(version.To) |
| 35 | +if err != nil { |
| 36 | +logrus.Error(err) |
| 37 | +continue |
| 38 | +} |
| 39 | + |
| 40 | +versions = append(versions, v) |
| 41 | +} |
| 42 | +semver.Sort(versions) |
| 43 | + |
| 44 | +// Filter only latest version based on minor |
| 45 | +var lastVersion semver.Version |
| 46 | +firstRun := true |
| 47 | +lastVersions := semver.Versions{} |
| 48 | +for i, version := range versions { |
| 49 | +if firstRun { |
| 50 | +lastVersion = version |
| 51 | +firstRun = false |
| 52 | +} |
| 53 | + |
| 54 | +if lastVersion.Major != version.Major || lastVersion.Minor != version.Minor { |
| 55 | +lastVersions = append(lastVersions, lastVersion) |
| 56 | +} else if i+1 == len(versions) { |
| 57 | +lastVersions = append(lastVersions, version) |
| 58 | +} |
| 59 | + |
| 60 | +lastVersion = version |
| 61 | +} |
| 62 | + |
| 63 | +// Remove all tags which are published on docker |
| 64 | +tags, err := getTags() |
| 65 | +for _, tag := range tags { |
| 66 | +tagVersion, err := semver.Make(tag.Name) |
| 67 | +if err != nil { |
| 68 | +continue |
| 69 | +} |
| 70 | +for i, version := range lastVersions { |
| 71 | +if version.String() == tag.Name { |
| 72 | +lastVersions = append(lastVersions[:i], lastVersions[i+1:]...) |
| 73 | +} |
| 74 | +} |
| 75 | + |
| 76 | +key := fmt.Sprintf("%d.%d", tagVersion.Major, tagVersion.Minor) |
| 77 | +if val, ok := latestVersionProceeded[key]; ok { |
| 78 | +if val == tagVersion.String() { |
| 79 | +logrus.Info("Delete ", tagVersion.String(), " from latest proceeded") |
| 80 | +delete(latestVersionProceeded, key) |
| 81 | +} |
| 82 | +} |
| 83 | +} |
| 84 | + |
| 85 | +for _, version := range lastVersions { |
| 86 | +if version.Major == 0 && version.Minor < 13 { |
| 87 | +continue |
| 88 | +} |
| 89 | +key := fmt.Sprintf("%d.%d", version.Major, version.Minor) |
| 90 | + |
| 91 | +logrus.Info(latestVersionProceeded) |
| 92 | +if val, ok := latestVersionProceeded[key]; ok { |
| 93 | +logrus.Info("OK ", val) |
| 94 | +if val == version.String() { |
| 95 | +logrus.Info("Version exists in cache SKIP") |
| 96 | +continue |
| 97 | +} |
| 98 | +} |
| 99 | + |
| 100 | +updateVersion(version) |
| 101 | +} |
| 102 | +} |
| 103 | + |
| 104 | +func updateVersion(version semver.Version) { |
| 105 | +logrus.Info("Start ", version.String()) |
| 106 | +latestVersionProceeded[fmt.Sprintf("%d.%d", version.Major, version.Minor)] = version.String() |
| 107 | +pathRepo := fmt.Sprintf("/tmp/factorio-%s-repo", version) |
| 108 | + |
| 109 | +err := gitCloneRepo(pathRepo) |
| 110 | +if err != nil { |
| 111 | +logrus.Panic(err) |
| 112 | +} |
| 113 | +defer os.RemoveAll(pathRepo) |
| 114 | +logrus.Info("Cloned repo") |
| 115 | + |
| 116 | +err = gitCheckoutBranch(pathRepo, "update-"+version.String()) |
| 117 | +if err != nil { |
| 118 | +logrus.Panic(err) |
| 119 | +} |
| 120 | +logrus.Info("Checkout branch ", version) |
| 121 | + |
| 122 | +checksum, err := factorioGetChecksum(fmt.Sprintf("https://www.factorio.com/get-download/%s/headless/linux64", version)) |
| 123 | +if err != nil { |
| 124 | +logrus.Panic(err) |
| 125 | +} |
| 126 | +logrus.Info("Got checksum ", checksum) |
| 127 | + |
| 128 | +err = editDockerfile(pathRepo, version, checksum) |
| 129 | +if err != nil { |
| 130 | +logrus.Panic(err) |
| 131 | +} |
| 132 | +logrus.Info("Edited Dockerfile") |
| 133 | +err = editReadme(pathRepo, version) |
| 134 | +if err != nil { |
| 135 | +logrus.Panic(err) |
| 136 | +} |
| 137 | +logrus.Info("Edited README") |
| 138 | + |
| 139 | +err = gitCreateCommit(pathRepo, "update") |
| 140 | +if err != nil { |
| 141 | +logrus.Panic(err) |
| 142 | +} |
| 143 | +logrus.Info("Committed") |
| 144 | + |
| 145 | +err = gitPushBranch(pathRepo, "update-"+version.String()) |
| 146 | +if err != nil { |
| 147 | +logrus.Panic(err) |
| 148 | +} |
| 149 | +logrus.Info("Pushed") |
| 150 | + |
| 151 | +createPullRequest(version, "update-"+version.String()) |
| 152 | +} |
0 commit comments