2020-03-20 22:22:21 -07:00
# Release Process
2021-05-12 19:10:56 -04:00
## Semantic Convention Generation
2023-07-26 17:09:04 +02:00
New versions of the [OpenTelemetry Semantic Conventions] mean new versions of the `semconv` package need to be generated.
2022-04-12 13:40:43 -07:00
The `semconv-generate` make target is used for this.
2021-05-12 19:10:56 -04:00
2023-07-26 17:09:04 +02:00
1. Checkout a local copy of the [OpenTelemetry Semantic Conventions] to the desired release tag.
2023-01-05 14:58:42 -08:00
2. Pull the latest `otel/semconvgen` image: `docker pull otel/semconvgen:latest`
3. Run the `make semconv-generate ...` target from this repository.
2021-05-12 19:10:56 -04:00
2022-04-12 13:40:43 -07:00
For example,
2021-05-12 19:10:56 -04:00
2022-04-12 13:40:43 -07:00
``` sh
2023-07-26 17:09:04 +02:00
export TAG = "v1.21.0" # Change to the release version you are generating.
export OTEL_SEMCONV_REPO = "/absolute/path/to/opentelemetry/semantic-conventions"
2023-01-05 14:58:42 -08:00
docker pull otel/semconvgen:latest
2023-07-26 17:09:04 +02:00
make semconv-generate # Uses the exported TAG and OTEL_SEMCONV_REPO.
2022-04-12 13:40:43 -07:00
```
2021-06-10 13:03:43 -04:00
2022-04-12 13:40:43 -07:00
This should create a new sub-package of [`semconv` ](./semconv ).
Ensure things look correct before submitting a pull request to include the addition.
2021-06-10 13:03:43 -04:00
2023-08-14 16:42:08 +02:00
## Breaking changes validation
You can run `make gorelease` that runs [gorelease ](https://pkg.go.dev/golang.org/x/exp/cmd/gorelease ) to ensure that there are no unwanted changes done in the public API.
You can check/report problems with `gorelease` [here ](https://golang.org/issues/26420 ).
2020-03-20 22:22:21 -07:00
## Pre-Release
2021-10-01 16:20:32 -04:00
First, decide which module sets will be released and update their versions
in `versions.yaml` . Commit this change to a new branch.
2020-07-31 10:08:50 -07:00
Update go.mod for submodules to depend on the new release which will happen in the next step.
2021-10-01 16:20:32 -04:00
1. Run the `prerelease` make target. It creates a branch
`prerelease_<module set>_<new tag>` that will contain all release changes.
2020-03-20 22:22:21 -07:00
```
2021-10-01 16:20:32 -04:00
make prerelease MODSET=<module set>
2020-07-13 13:09:59 -07:00
` ``
2. Verify the changes.
` ``
2021-10-01 16:20:32 -04:00
git diff ...prerelease_<module set>_<new tag>
2020-07-13 13:09:59 -07:00
` ``
2020-07-31 10:08:50 -07:00
This should have changed the version for all modules to be ` <new tag>`.
2021-10-01 16:20:32 -04:00
If these changes look correct, merge them into your pre-release branch:
` ``go
git merge prerelease_<module set>_<new tag>
` ``
2020-07-13 13:09:59 -07:00
2020-07-31 10:08:50 -07:00
3. Update the [Changelog](./CHANGELOG.md).
- Make sure all relevant changes for this release are included and are in language that non-contributors to the project can understand.
To verify this, you can look directly at the commits since the ` <last tag>`.
` ``
git --no-pager log --pretty=oneline "<last tag>..HEAD"
` ``
- Move all the ` Unreleased` changes into a new section following the title scheme (` [<new tag>] - <date of release>`).
- Update all the appropriate links at the bottom.
2020-03-20 22:22:21 -07:00
2020-07-31 10:08:50 -07:00
4. Push the changes to upstream and create a Pull Request on GitHub.
Be sure to include the curated changes from the [Changelog](./CHANGELOG.md) in the description.
2020-07-13 13:09:59 -07:00
2020-03-20 22:22:21 -07:00
## Tag
2020-07-31 10:08:50 -07:00
Once the Pull Request with all the version changes has been approved and merged it is time to tag the merged commit.
***IMPORTANT***: It is critical you use the same tag that you used in the Pre-Release step!
2021-10-01 16:20:32 -04:00
Failure to do so will leave things in a broken state. As long as you do not
change ` versions.yaml` between pre-release and this step, things should be fine.
2020-07-31 10:08:50 -07:00
***IMPORTANT***: [There is currently no way to remove an incorrectly tagged version of a Go module](https://github.com/golang/go/issues/34189).
It is critical you make sure the version you push upstream is correct.
[Failure to do so will lead to minor emergencies and tough to work around](https://github.com/open-telemetry/opentelemetry-go/issues/331).
2021-10-01 16:20:32 -04:00
1. For each module set that will be released, run the ` add-tags` make target
using the ` <commit-hash>` of the commit on the main branch for the merged Pull Request.
2020-07-13 13:09:59 -07:00
` ``
2021-10-01 16:20:32 -04:00
make add-tags MODSET=<module set> COMMIT=<commit hash>
2020-07-13 13:09:59 -07:00
` ``
2021-10-01 16:20:32 -04:00
It should only be necessary to provide an explicit ` COMMIT` value if the
current ` HEAD` of your working directory is not the correct commit.
2020-07-31 10:08:50 -07:00
2. Push tags to the upstream remote (not your fork: ` github.com/open-telemetry/opentelemetry-go.git`).
Make sure you push all sub-modules as well.
2020-03-20 22:22:21 -07:00
` ``
git push upstream <new tag>
git push upstream <submodules-path/new tag>
2020-07-13 13:09:59 -07:00
...
2020-03-20 22:22:21 -07:00
` ``
## Release
2020-07-31 10:08:50 -07:00
Finally create a Release for the new ` <new tag>` on GitHub.
The release body should include all the release notes from the Changelog for this release.
2020-03-30 13:10:18 -07:00
## Verify Examples
2020-07-31 10:08:50 -07:00
After releasing verify that examples build outside of the repository.
2020-03-30 13:10:18 -07:00
` ``
./verify_examples.sh
` ``
2020-07-31 10:08:50 -07:00
The script copies examples into a different directory removes any ` replace` declarations in ` go.mod` and builds them.
This ensures they build with the published release, not the local copy.
2020-08-05 09:01:00 -07:00
2021-04-27 14:33:18 +00:00
## Post-Release
### Contrib Repository
2020-08-05 09:01:00 -07:00
2021-02-04 11:13:25 -08:00
Once verified be sure to [make a release for the ` contrib` repository](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/RELEASING.md) that uses this release.
2021-04-27 14:33:18 +00:00
### Website Documentation
2024-01-16 14:06:37 +01:00
Update the [Go instrumentation documentation] in the OpenTelemetry website under [content/en/docs/languages/go].
2021-04-27 14:33:18 +00:00
Importantly, bump any package versions referenced to be the latest one you just released and ensure all code examples still compile and are accurate.
2022-04-12 13:40:43 -07:00
2023-07-26 17:09:04 +02:00
[OpenTelemetry Semantic Conventions]: https://github.com/open-telemetry/semantic-conventions
2024-01-16 14:06:37 +01:00
[Go instrumentation documentation]: https://opentelemetry.io/docs/languages/go/
[content/en/docs/languages/go]: https://github.com/open-telemetry/opentelemetry.io/tree/main/content/en/docs/languages/go
2023-06-26 16:51:12 +02:00
### Demo Repository
Bump the dependencies in the following Go services:
- [` accountingservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/accountingservice)
- [` checkoutservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/checkoutservice)
- [` productcatalogservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/productcatalogservice)