diff --git a/.github/workflows/rename-module.yml b/.github/workflows/rename-module.yml new file mode 100644 index 00000000000..a197cca7ab6 --- /dev/null +++ b/.github/workflows/rename-module.yml @@ -0,0 +1,81 @@ +name: Rename Go module + +on: + # During development, the next two lines MAY be enabled to have the PR + # automatically run this workflow for inspection of the resulting branch. + # However, they MUST be disabled again before merging otherwise *all* PRs will + # run this. + # + # pull_request: + # branches: [ main ] + workflow_dispatch: + inputs: + source_commit: + description: 'Upstream commit on which to base module renaming' + required: true + type: string + default: '2bd6bd01d2e8561dd7fc21b631f4a34ac16627a1' + +jobs: + rename-module: + runs-on: ubuntu-latest + env: + source_commit: "${{ inputs.source_commit || '2bd6bd01d2e8561dd7fc21b631f4a34ac16627a1' }}" + # env variables cannot reference others so we have to duplicate the || + output_branch: "${{ github.ref_name }}_auto-rename-module-${{ inputs.source_commit || '2bd6bd01d2e8561dd7fc21b631f4a34ac16627a1' }}" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 # everything + fetch-tags: true + + - name: Check out source commit + run: git checkout ${{ env.source_commit }} + + - name: Globally update module name + run: | + go mod edit -module github.com/ava-labs/libevm; + find . -iname '*.go' -o -iname '*.txt' | xargs sed -i -E \ + 's|(["`]github\.com/)ethereum/go-ethereum|\1ava-labs/libevm|g'; + + - name: Remnant references + run: | + find . -type f | \ + xargs grep -In github.com/ethereum/go-ethereum | \ + grep -v "https://github.com/ethereum/go-ethereum" + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: 1.21.4 + + - name: Smoke tests + # `go list` shows us the module name and grep will non-zero exit on mismatch + # `go build` is a rudimentary but broad test of correctness + # The explicitly tested packages are edge cases: + # - bind generates tests and a go.mod on the fly + # - rlpgen has testdata with imports that need updating + run: | + go list . | grep ava-labs/libevm; + go build ./...; + go test ./accounts/abi/bind ./rlp/rlpgen + + - name: Commit to new branch + uses: devops-infra/action-commit-push@8bc2ff9f9de7aa2a7581fc7e5b6401c04cab54c7 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + target_branch: ${{ env.output_branch }} + force: true + commit_prefix: "[AUTO] rename Go module + update internal import paths" + + - name: Open PR to "renamed-go-module" iff workflow dispatched on "main" + # If we are changing the way in which we manage module renaming then it + # MUST go through PR review to main; only then can it open PRs. + if: github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/main' + uses: devops-infra/action-pull-request@v0.5.5 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + source_branch: ${{ env.output_branch }} + target_branch: renamed-go-module + title: "[AUTO] Rename upstream Go module at `${{ env.source_commit }}`" + body: "_PR generated by GitHub Action_"