Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/update-dependencies.yml
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
/reth-data/
/nethermind-data/
/dependency_updater/dependency_updater
/git_commit_message.env
.DS_Store
134 changes: 87 additions & 47 deletions dependency_updater/dependency_updater.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,17 @@ import (

"log"
"os"
"os/exec"
"strings"
)

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"`
}

type VersionUpdateInfo struct {
Expand Down Expand Up @@ -110,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)
}
Expand All @@ -124,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"
Expand All @@ -134,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
}
Expand All @@ -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)
Expand All @@ -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
}
}

Expand All @@ -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
}

return *version.TagName, *commit.SHA, updatedDependency, nil
if version != nil {
return *version.TagName, commit, updatedDependency, nil
}

return "", commit, updatedDependency, nil
}

func updateVersionTagAndCommit(
Expand All @@ -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)
}
Expand Down Expand Up @@ -293,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
}
}
25 changes: 15 additions & 10 deletions versions.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}