-
Notifications
You must be signed in to change notification settings - Fork 207
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
Setup pipeline that builds release artefacts #1073
Comments
A couple of clarifications on what I was thinking:
|
👍 on first two points. Regarding Docker tags just to make sure I understand, when you say the release version will be added to the image as part of the release process you mean manually right? I.e. the automated build that happens will just upload the image tagged with the commit hash, which is something that's already happening.
|
I've been finding my way through the jungle here and I wanted to document some findings / current issues I'm working through so that this information lives somewhere. XGoXGo is a tool used for cross-compiling golang packages, it was developed by karalabe (geth maintainer) specifically for geth and hasn't been really updated. I've spent a while to understand how There's also now a fork of the package that's a bit more maintained because karalabe has kinda abandoned it, but the old version is still used inside of There's some extra issues that came up because of how we do the Compiling for WindowsUt looks like Compiling for DarwinI've been hitting some issues here as well because of a fork of a dependency we're maintaining that includes some iOS specific headers when compiling for After talking with @jeanregisser he pointed out that we can get rid of that workaround if we apply this patch from upstream What has worked so far, what's leftI did manage to setup a Dockerfile that builds the Once I manage to hopefully fix the the other compilation targets this Dockerfile will be able to build all binaries. At that point I would need to:
|
Current* status of cross-compilation:
We're still having problems with 32bit windows but I think we can live with this for now. |
### Description This PR includes the necessary bits to setup a CI pipeline that cross-compiles all geth tools into release binaries for the platforms we want/support. Currently these are: - ✅Linux 32bit/64bit - ✅Darwin 32bit/64bit (~pending on #1082~ merged!) - ✅Windows 64bit (~pending on celo-bls-go v0.1.6 release~ ~pending on #1089~ merged!) Elements of the PR: - `Dockerfile.binaries` for the container where cross-compilation occurs. It's based on a [fork of xgo](https://github.com/techknowlogick/xgo), and includes some back-ported mingw packages for the windows build. - Changes to the `geth` build scripts: - Introduce a new CI environment in `internal/build/env.go` which which can be used for Google Cloud Build. - Create a new ci task in `build/ci.go` that bundles the binaries into well named release archive - `cloudbuild-binaries.yaml` which defines the CI pipeline. It should be used in conjunction with a trigger on `release/.*` and `master` branches and the trigger should have to variables: - `_BUCKET` with the name of the google cloud storage bucket where the artefacts will be stored - `_BUILD_TARGETS` comma-separated string of build targets. e.g. `linux/amd64,linux/386` #### Shortcomings - 🔴 The geth `build.Environment` struct requires the commit timestamp, which is then passed to `main.gitDate` in the binaries that it builds. Usually this is extracted from the git but in Cloud Build in the CI steps the git data is stripped and all we have is what's passed through env vars. I have substituted the commit timestamp with the build timestamp instead. - 🟡 The `xgo` image is really large (3gb) and adds about ~4minutes to the build time #### Release artefacts The pipeline outputs release artefacts into `<bucket>/<branch>/<file>`. For example here's the output of a test build: <img width="553" alt="Screenshot 2020-06-29 at 11 41 00" src="https://user-images.githubusercontent.com/304771/85994959-1433eb00-b9fe-11ea-9180-22ea95cb774c.png"> A few things to notice here: - The folder is `<bucket>/release/1.1` yet the version is `1.0.0-unstable` this is because there isn't any enforced relationship between the branch name and the version sourced from `params/version.go` which is the authoritative source. So in this case I just created the dummy `release/1.1` branch on my fork in order to play around. Because we're using the branch name in the path all "nightly" version will be stored in the `<bucket>/master` folder, if we setup the trigger on `master`. - There are 2 archives per platform, one containing only `geth` and the other containing all binary tools located inside `cmd`, just like geth releases.⚠️ The archives also contain the "COPYING" file, we need to decide if we want to make changes to that⚠️ #### Post-merge TODOs: - [x] Create a bucket and triggers in `celo-testnet` to start running the pipeline - [x] Enable more build targets as they are unblocked ### Tested I have currently tested the CI pipeline in a personal google cloud project and tested the linux binaries in docker. ### Related issues - Fixes #1073 ### Backwards compatibility Changes are only related to tooling so no problem with compatibility.
Summary
As part of our Release Process we need to setup a pipeline that automatically outputs release artefacts based on the code in our
release/<version>
andmaster
branches.Details
The current proposal is that we do this in Google Cloud Build, in a project managed by cLabs with binaries stored in Cloud Storage and Docker images published to Container Registry.
Binaries
Binaries should be created for the following systems:
And the following platforms:
Resulting in 6 binary artefacts of the form:
celo-blockchain-vX.Y.Z-stable-{system}-{plaftorm}.{exe?}.tar.gz
Optional/future tasks:
celotooljs
functionality to allow signing release binaries and uploading the signatures for ease of use.Docker Images
Docker images will be built and pushed to our registry and tags will be updated.
Optional/future tasks:
celotooljs
functionality to allow signing of docker releases via the tar export mechanism (docker save us.gcr.io/celo-testnet/celo-node:vX.Y.Z
)The text was updated successfully, but these errors were encountered: