As of block height 31,056,500 (March 26, 2025, 3:00 AM UTC), Celo is no longer a standalone Layer 1 blockchain—it is now an Ethereum Layer 2!
Some documentation may be outdated as updates are in progress. If you encounter issues, please file a bug report.For the most up-to-date information, refer to our Celo L2 documentation.
This release process is currently in use.
Versioning
Releases of Attestation Service are made as needed. Releases are numbered according to semantic versioning, as described at semver.org. Development builds should be identified with-dev
, and only one commit should exist with a released version x.y.z
for any (x, y, z)
.
Documentation
Documentation is maintained in the celo-org/docs repo and is hosted on docs.celo.org.Identifying releases
Git branches
Development is done on themaster
branch, which corresponds to the next major or minor version. Changes to be included in a patch release of an existing minor version are cherry-picked to that existing release branch.
Git tags
Each release should be created on Github and tagged with the version number, e.g.attestation-service-vX.Y.Z
. Each release should include a summary of the release contents, including links to pull requests and issues with detailed description of any notable changes.
Tags should be signed and can be verified with the following command.
Docker tags
Each Docker image is tagged withattestation-service-<commithash>
. Just as a Git tag immutably points to a commit hash, the Docker tag should immutably point to an image hash.
In addition, each Docker image corresponding to a released version should be tagged with attestation-service-vX.Y.Z
.
The latest image qualified for deployment to various networks are also tagged as follows:
- Alfajores:
attestation-service-alfajores
- Baklava:
attestation-service-baklava
- Mainnet:
attestation-service-mainnet
Signatures
Artifacts produced by this build process (e.g. tags, Docker images) will be signed by a core developer key. Public keys for core developers are hosted on celo.org and can be imported togpg
with the following command:
Build process
Docker images
Docker images are built automatically with Google Cloud Build upon pushes tomaster
and all release branches. Automated builds will be tagged in Google Artifact Registry with the corresponding commit hash.
A signature should be produced over the image automatically built at the corresponding commit hash and included with the Github release.
Release image signatures can be verified with the following command:
Testing
As well as monorepo CI tests, all releases are expected to go through manual testing as needed to verify security properties, accuracy of documentation, and compatibility with deployed and anticipated versions ofcelocli
and wallets including Valora. Releases currently involve coordinating with Valora to run the verification e2e tests in CI.
Promotion process
Source control
Patch releases should be constructed by cherry-picking all included commits frommaster
to the release/attestation-service/x.y
branch, if necessary created from the attestation-service-vX.Y.Z
tag of the most recent major or minor release. The first commit of this process should change the version number encoded in the source from x.y.z
to x.y.z+1-dev
and the final commit should change the version number to x.y.z+1
.
Major and minor releases should be constructed by pushing a commit to the master
branch to change the encoded version number from x.y.z-dev
to x.y.z
. A attestation-service-vX.Y.Z
tag should be created at this commit which uniquely references one commit; release notes should be published alongside this. The next commit should change the version number from x.y.z
to x.y+1.0-dev
, or x+1.0.0-dev
if the next planned release is a major release.
Distribution
Distribution of an image follows this schedule:Date | Action |
T-1w |
|
T |
|
T+1w onwards |
|