From cf61b0702ded013d76ef506bbeaba6477e8aaad0 Mon Sep 17 00:00:00 2001 From: dieynaba ba Date: Mon, 7 Jul 2025 12:44:48 -0700 Subject: [PATCH 1/4] add support for tracking branch --- dependency_updater/dependency_updater.go | 103 ++++++++++++++--------- versions.json | 25 +++--- 2 files changed, 79 insertions(+), 49 deletions(-) diff --git a/dependency_updater/dependency_updater.go b/dependency_updater/dependency_updater.go index 67c1263f4..8178267a3 100644 --- a/dependency_updater/dependency_updater.go +++ b/dependency_updater/dependency_updater.go @@ -18,11 +18,13 @@ import ( ) type Info struct { - Tag string `json:"tag"` + Tag string `json:"tag,omitempty"` Commit string `json:"commit"` TagPrefix string `json:"tagPrefix,omitempty"` - Owner string `json:"owner` - Repo string `json:"repo` + Owner string `json:"owner"` + Repo string `json:"repo"` + Branch string `json:"branch,omitempty"` + Tracking string `json:"tracking"`// change to string } type VersionUpdateInfo struct { @@ -149,7 +151,7 @@ func getAndUpdateDependency(ctx context.Context, client *github.Client, dependen if err != nil { return VersionUpdateInfo{}, err } - if updatedDependency != (VersionUpdateInfo{}) { + if updatedDependency != (VersionUpdateInfo{}) || dependencies[dependencyType].Tracking == "branch" { e := updateVersionTagAndCommit(commit, version, dependencyType, repoPath, dependencies) if e != nil { return VersionUpdateInfo{}, fmt.Errorf("error updating version tag and commit: %s", e) @@ -161,48 +163,49 @@ func getAndUpdateDependency(ctx context.Context, client *github.Client, dependen func getVersionAndCommit(ctx context.Context, client *github.Client, dependencies Dependencies, dependencyType string) (string, string, VersionUpdateInfo, error) { var version *github.RepositoryRelease - var err error + var commit string var diffUrl string var updatedDependency VersionUpdateInfo foundPrefixVersion := false options := &github.ListOptions{Page: 1} + if dependencies[dependencyType].Tracking == "tag" { + for { + releases, resp, err := client.Repositories.ListReleases( + ctx, + dependencies[dependencyType].Owner, + dependencies[dependencyType].Repo, + options) - for { - releases, resp, err := client.Repositories.ListReleases( - ctx, - dependencies[dependencyType].Owner, - dependencies[dependencyType].Repo, - options) - - if err != nil { - return "", "", VersionUpdateInfo{}, fmt.Errorf("error getting releases: %s", err) - } - - if dependencies[dependencyType].TagPrefix == "" { - version = releases[0] - if *version.TagName != dependencies[dependencyType].Tag { - diffUrl = generateGithubRepoUrl(dependencies, dependencyType) + "/compare/" + - dependencies[dependencyType].Tag + "..." + *version.TagName + if err != nil { + return "", "", VersionUpdateInfo{}, fmt.Errorf("error getting releases: %s", err) } - break - } else if dependencies[dependencyType].TagPrefix != "" { - for release := range releases { - if strings.HasPrefix(*releases[release].TagName, dependencies[dependencyType].TagPrefix) { - version = releases[release] - foundPrefixVersion = true - if *version.TagName != dependencies[dependencyType].Tag { - diffUrl = generateGithubRepoUrl(dependencies, dependencyType) + "/compare/" + - dependencies[dependencyType].Tag + "..." + *version.TagName + + if dependencies[dependencyType].TagPrefix == "" { + version = releases[0] + if *version.TagName != dependencies[dependencyType].Tag { + diffUrl = generateGithubRepoUrl(dependencies, dependencyType) + "/compare/" + + dependencies[dependencyType].Tag + "..." + *version.TagName + } + break + } else if dependencies[dependencyType].TagPrefix != "" { + for release := range releases { + if strings.HasPrefix(*releases[release].TagName, dependencies[dependencyType].TagPrefix) { + version = releases[release] + foundPrefixVersion = true + if *version.TagName != dependencies[dependencyType].Tag { + diffUrl = generateGithubRepoUrl(dependencies, dependencyType) + "/compare/" + + dependencies[dependencyType].Tag + "..." + *version.TagName + } + break } + } + if foundPrefixVersion { break } - } - if foundPrefixVersion { + options.Page = resp.NextPage + } else if resp.NextPage == 0 { break } - options.Page = resp.NextPage - } else if resp.NextPage == 0 { - break } } @@ -215,17 +218,38 @@ func getVersionAndCommit(ctx context.Context, client *github.Client, dependencie } } - commit, _, err := client.Repositories.GetCommit( + if dependencies[dependencyType].Tracking == "tag" { + versionCommit, _, err := client.Repositories.GetCommit( ctx, dependencies[dependencyType].Owner, dependencies[dependencyType].Repo, "refs/tags/"+*version.TagName, &github.ListOptions{}) - if err != nil { - return "", "", VersionUpdateInfo{}, fmt.Errorf("error getting commit for "+dependencyType+": %s", err) + if err != nil { + return "", "", VersionUpdateInfo{}, fmt.Errorf("error getting commit for "+dependencyType+": %s", err) + } + commit = *versionCommit.SHA + + } else if dependencies[dependencyType].Tracking == "branch" { + branchCommit, _, err := client.Repositories.ListCommits( + ctx, + dependencies[dependencyType].Owner, + dependencies[dependencyType].Repo, + &github.CommitsListOptions{ + SHA: dependencies[dependencyType].Branch, + }, + ) + if err != nil { + return "", "", VersionUpdateInfo{}, fmt.Errorf("error listing commits for "+dependencyType+": %s", err) + } + commit = *branchCommit[0].SHA + } + + if version != nil { + return *version.TagName, commit, updatedDependency, nil } - return *version.TagName, *commit.SHA, updatedDependency, nil + return "", commit, updatedDependency, nil } func updateVersionTagAndCommit( @@ -247,6 +271,7 @@ func updateVersionTagAndCommit( func writeToVersionsEnv(repoPath string, dependencies Dependencies) error { // formatting json updatedJson, err := json.MarshalIndent(dependencies, "", " ") + print(dependencies["base_reth_node"].Branch) if err != nil { return fmt.Errorf("error Marshaling dependencies json: %s", err) } diff --git a/versions.json b/versions.json index 86c6dd8f8..5911c7a38 100644 --- a/versions.json +++ b/versions.json @@ -2,32 +2,37 @@ "base_reth_node": { "tag": "v0.1.3", "commit": "f28c2751a0737d7617e52253a9e81070b87290b5", - "Owner": "base", - "Repo": "node-reth" + "owner": "base", + "repo": "node-reth", + "tracking": "tag" }, "nethermind": { "tag": "1.32.2", "commit": "d3e7eb98b28d0b9c7b58a9fb45e83b640b2e17e6", - "Owner": "NethermindEth", - "Repo": "nethermind" + "owner": "NethermindEth", + "repo": "nethermind", + "tracking": "tag" }, "op_geth": { "tag": "v1.101511.0", "commit": "68075997f33907401a93216aa426514c5ddc8870", - "Owner": "ethereum-optimism", - "Repo": "op-geth" + "owner": "ethereum-optimism", + "repo": "op-geth", + "tracking": "tag" }, "op_node": { "tag": "op-node/v1.13.4", "commit": "7eedfced77eb30ae72cc8d0e7c793dd2d1b6f161", "tagPrefix": "op-node", - "Owner": "ethereum-optimism", - "Repo": "optimism" + "owner": "ethereum-optimism", + "repo": "optimism", + "tracking": "tag" }, "op_reth": { "tag": "v1.5.0", "commit": "61e38f9af154fe91e776d8f5e449d20a1571e8cf", - "Owner": "paradigmxyz", - "Repo": "reth" + "owner": "paradigmxyz", + "repo": "reth", + "tracking": "tag" } } \ No newline at end of file From 6f5d87036864d33f4fbed81b53155bf93bcaf1ba Mon Sep 17 00:00:00 2001 From: dieynaba ba Date: Mon, 7 Jul 2025 12:48:22 -0700 Subject: [PATCH 2/4] remove comment and fix formatting --- dependency_updater/dependency_updater.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependency_updater/dependency_updater.go b/dependency_updater/dependency_updater.go index 8178267a3..59f2c4eb2 100644 --- a/dependency_updater/dependency_updater.go +++ b/dependency_updater/dependency_updater.go @@ -24,7 +24,7 @@ type Info struct { Owner string `json:"owner"` Repo string `json:"repo"` Branch string `json:"branch,omitempty"` - Tracking string `json:"tracking"`// change to string + Tracking string `json:"tracking"` } type VersionUpdateInfo struct { From f2b0fe72f7c3a55f010041f3ccd0e749b7c8e2fc Mon Sep 17 00:00:00 2001 From: dieynaba ba Date: Mon, 7 Jul 2025 12:52:24 -0700 Subject: [PATCH 3/4] test build --- dependency_updater/dependency_updater.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependency_updater/dependency_updater.go b/dependency_updater/dependency_updater.go index 59f2c4eb2..015627891 100644 --- a/dependency_updater/dependency_updater.go +++ b/dependency_updater/dependency_updater.go @@ -320,4 +320,4 @@ func createVersionsEnv(repoPath string, dependencies Dependencies) error { func generateGithubRepoUrl(dependencies Dependencies, dependencyType string) string { return "https://github.com/" + dependencies[dependencyType].Owner + "/" + dependencies[dependencyType].Repo -} +} \ No newline at end of file From 5c7f7a639590f06e08560736873286ae3efc0580 Mon Sep 17 00:00:00 2001 From: dieynaba ba Date: Tue, 8 Jul 2025 09:07:59 -0700 Subject: [PATCH 4/4] add git action to automatically run updater --- .github/workflows/update-dependencies.yml | 44 +++++++++++++++++++++++ .gitignore | 1 + dependency_updater/dependency_updater.go | 29 +++++++++++---- 3 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/update-dependencies.yml diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml new file mode 100644 index 000000000..7b7178d37 --- /dev/null +++ b/.github/workflows/update-dependencies.yml @@ -0,0 +1,44 @@ +name: Update Dockerfile Dependencies + +on: + schedule: + - cron: '0 12 * * * *' + push: + branches: + - update-dependencies + +permissions: + pull-requests: write + +jobs: + update: + name: update + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v4 + + - name: Load .env file + uses: xom9ikk/dotenv@v2.3.0 + with: + path: ~/node/git_commit_message.env + load-mode: strict + + - name: view env + run: echo ${{ env.TITLE }} + + # - name: build dependency updater + # run: go build ./dependency_updater + + # - name: build dependency updater + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # run: ./dependency_updater --repo ~/node --commit true + + # - name: create pull request + # uses: peter-evans/create-pull-request@v7 + # with: + # title: ${{ env.TITLE }} + # commit-message: ${{ env.TITLE }} + # body: ${{ env.DESC }} + # branch: update-dependencies \ No newline at end of file diff --git a/.gitignore b/.gitignore index daa8017b0..1647a201e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ /reth-data/ /nethermind-data/ /dependency_updater/dependency_updater +/git_commit_message.env .DS_Store \ No newline at end of file diff --git a/dependency_updater/dependency_updater.go b/dependency_updater/dependency_updater.go index 015627891..530cd2ee6 100644 --- a/dependency_updater/dependency_updater.go +++ b/dependency_updater/dependency_updater.go @@ -13,7 +13,6 @@ import ( "log" "os" - "os/exec" "strings" ) @@ -112,7 +111,7 @@ func updater(token string, repoPath string, commit bool) error { } if commit && updatedDependencies != nil { - err := createCommitMessage(updatedDependencies) + err := createCommitMessage(updatedDependencies, repoPath) if err != nil { return fmt.Errorf("error creating commit message: %s", err) } @@ -126,7 +125,7 @@ func updater(token string, repoPath string, commit bool) error { return nil } -func createCommitMessage(updatedDependencies []VersionUpdateInfo) error { +func createCommitMessage(updatedDependencies []VersionUpdateInfo, repoPath string) error { var repos []string commitTitle := "chore: updated " commitDescription := "Updated dependencies for: \n" @@ -136,12 +135,13 @@ func createCommitMessage(updatedDependencies []VersionUpdateInfo) error { commitDescription += repo + " => " + tag + " (" + dependency.DiffUrl + ")" + "\n" repos = append(repos, repo) } + commitDescription = strings.TrimSuffix(commitDescription, "\n") commitTitle += strings.Join(repos, ", ") - cmd := exec.Command("git", "commit", "-am", commitTitle, "-m", commitDescription) - - if err := cmd.Run(); err != nil { - return fmt.Errorf("error running git commit -m: %s", err) + commitDescription = "\"" + commitDescription + "\"" + err := createGitMessageEnv(commitTitle, commitDescription, repoPath) + if err != nil { + return fmt.Errorf("error creating git commit message: %s", err) } return nil } @@ -318,6 +318,21 @@ func createVersionsEnv(repoPath string, dependencies Dependencies) error { return nil } +func createGitMessageEnv(title string, description string, repoPath string) error { + file, err := os.Create(repoPath + "/git_commit_message.env") + if err != nil { + return fmt.Errorf("error creating git_commit_message.env file: %s", err) + } + defer file.Close() + + envString := "export TITLE=" + title + "\nexport DESC=" + description + _, err = file.WriteString(envString) + if err != nil { + return fmt.Errorf("error writing to git_commit_message.env file: %s", err) + } + return nil +} + func generateGithubRepoUrl(dependencies Dependencies, dependencyType string) string { return "https://github.com/" + dependencies[dependencyType].Owner + "/" + dependencies[dependencyType].Repo } \ No newline at end of file