Skip to content

Update CONTRIBUTING.md to account for new module path #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Apr 7, 2025
Merged
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
25 changes: 20 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,17 @@

## Updating fork branches

As releases of `go-ethereum` are made, forked changes will need to be migrated on top of the new release in a new branch in this repository. We provide instructions below which describe how to produce git patches from a previous fork branch, clone `go-ethereum` into this repository under a new version branch, and apply the patches to it.
As releases of `go-ethereum` are made, we follow a consistent/predictable process to update our fork:
- The new version will be cloned on a new branch in this repository, retaining existing commit history (see existing branches).
- Our previous `medusa-geth` changes/commits are carried forward using git patches.
- Any new changes are applied at this step (and will be carried forward in future fork git patches).
- A final commit is made to refactor all module paths (e.g. in `go.mod`, `.go` imports, and all submodule files) from `github.com/ethereum/go-ethereum` to `github.com/crytic/medusa-geth`.
- Git patches cannot account for *newly added/removed imports* in `.go` files, so this is done as a manual replace-all operation. This commit should never be included in git patches mentioned previously.

### Creating git patches from previous branch

- Look at the latest release branch of this repository, note the latest commit hash (which we will call `BBBBBBB`) and the latest _original go-ethereum_ commit hash (which we will call `AAAAAAA`).
- Look at the latest release branch of this repository, obtain the last commit hash *prior to the module path refactor commit*.
- Take note of that^ commit hash (which we will call `BBBBBBB`) and the latest _original go-ethereum_ commit hash (which we will call `AAAAAAA`).
- Clone this repository to your local machine.
- Create a patch of the changes between commit `AAAAAAA` and `BBBBBBB` by using the command: `git format-patch -k AAAAAAA..BBBBBBB -o ./patches`, where `./patches` is the directory to save the generated patches.

Expand All @@ -23,7 +29,7 @@ As releases of `go-ethereum` are made, forked changes will need to be migrated o

- Clone the `go-ethereum` repository at the exact commit hash for the release you wish to fork.
- Add this repository as a remote (tracked repository) and remove the original `go-ethereum` repository as a remote.
- Create a new branch at your current position, name if `v<version number`, like the rest of `medusa-geth`'s releases (e.g. `v1.11.1`).
- Create a new branch at your current position, name it `v<version number`, like the rest of `medusa-geth`'s releases (e.g. `v1.11.1`).
- Delete all release tags pulled locally to your machine using `git tag -d $(git tag -l)` (we do not want to push `go-ethereum` release tags to this repository).
- Your local repository should now point to this repository as a remote, have no release tags locally, and be on a branch with a name that is consistent with our release version number.
- You can finally push your changes to the remote.
Expand All @@ -33,8 +39,18 @@ As releases of `go-ethereum` are made, forked changes will need to be migrated o
- Your local repository from the last steps should still be on the branch which has the latest vanilla `go-ethereum` release on it.
- To apply the original patches over it, which we generated earlier, run `git am -3 .\patches\<patch name>.patch` for any patches.
- The changes should now be applied, resolve merge conflicts from the patch (if any), and push to remote

### Refactoring the module path

- Perform a "replace-all" operation across the entire repository, replacing `github.com/ethereum/go-ethereum` to `github.com/crytic/medusa-geth`.
- **Important**: JetBrains GoLand and Visual Studio Code load find-and-replace results asynchronously, so replacing all before it is done loading may not actually replace all!
- Triple check that the `go.mod` path and all `.go` import paths are replaced.
- Failure to do so may result in `medusa` failing to compile later on.
- Commit this refactor with the commit message `DO NOT INCLUDE IN PATCH SET: Refactor module path` or similar, for clarity.
- Only commit `medusa-geth` changes, not changes to any submodules that were inadvertently refactored in the process.

### Linking the latest `medusa-geth` branch to `medusa`

Note that `medusa-geth` is linked to `medusa` through a [pseudo-version](https://go.dev/ref/mod#pseudo-versions), not
through a traditional release tag. A pseudo-version is a specially formatted pre-release version that encodes
information about a specific revision in a version control repository. To link the new `medusa-geth` forked branch,
Expand All @@ -48,8 +64,7 @@ go: github.com/crytic/[email protected]: invalid version: resolves to version
> **NOTE**: Do not worry about the "invalid version" error in the output above

- Copy the pseudo-version value. In the example above, it is `v0.0.0-20240209160711-dfded09070ca`.
- Open the `go.mod` file in the `medusa` repository and update the pseudo-version for `medusa-geth`. You can find this
by looking for the `replace` directive at the bottom of the `go.mod` file.
- Open the `go.mod` file in the `medusa` repository and update the pseudo-version for `medusa-geth`.

### Testing

Expand Down