Skip to content
This repository was archived by the owner on Oct 14, 2024. It is now read-only.

feat: add release for multiple modules #1276

Merged
merged 10 commits into from
Mar 12, 2024
Merged
Show file tree
Hide file tree
Changes from 7 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
44 changes: 44 additions & 0 deletions .github/workflows/post-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Post Release
on:
release:
types: [published]

jobs:
prepare:
name: Prepare
runs-on: ubuntu-latest
outputs:
modules: ${{ steps.modules.outputs.modules }}
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Get modules
id: modules
run: |
# shellcheck disable=SC2016
echo "modules=$(find . -name go.mod -type f -print0 | xargs -0 awk '/module/ {print $2}' | jq -c -R '[.,inputs] | map(sub("^github.com\/openclarity\/vmclarity\/";""))')" >> "$GITHUB_OUTPUT"

create_module_tags:
needs:
- prepare
name: Create module tags
runs-on: ubuntu-latest
strategy:
matrix:
tags: ${{ fromJson(needs.prepare.outputs.modules) }}
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Create tags
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: 'refs/tags/${{ matrix.tags }}/${{ github.ref_name }}',
sha: context.sha
})
22 changes: 0 additions & 22 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -151,25 +151,3 @@ jobs:
draft: true
name: "Release ${{ github.ref_name }}"
updateOnlyUnreleased: true

# TODO(sambetts) We need to publish a tag in the format "api/<version>" tag
# so that go mod is able to import the api module without overriding. We need
# to work out how to do this cleanly from github actions on release so that
# we don't need to manage it manually. We could do something this which will
# create another release:
#
# api_release:
# needs: release
# name: Release API Module
# runs-on: ubuntu-latest
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# with:
# fetch-depth: 0
# - name: Release API
# uses: softprops/action-gh-release@v1
# with:
# name: VMClarity {{ github.ref }} API
# body: See main {{ github.ref }} release for release notes.
# tag_name: api/{{ github.ref }}
1 change: 1 addition & 0 deletions .github/workflows/semantic-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ jobs:
revert
style
test
release

scopes: |
api
Expand Down
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -491,3 +491,12 @@ endif

$(DIST_DIR)/CHANGELOG.md: $(ROOT_DIR)/cliff.toml bin/git-cliff | $(DIST_DIR)
$(GITCLIFF_BIN) --config $(ROOT_DIR)/cliff.toml --output $@ $(GITCLIFF_OPTS)

.PHONY: multimod-verify
multimod-verify: bin/multimod
@echo "Validating versions.yaml file"
$(MULTIMOD_BIN) verify

.PHONY: multimod-prerelease
multimod-prerelease: bin/multimod
$(MULTIMOD_BIN) prerelease --all-module-sets --skip-go-mod-tidy=true --commit-to-different-branch=false
64 changes: 64 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Release

This document outlines the process for creating a new release for VMClarity using the [Go MultiMod Releaser](https://github.com/open-telemetry/opentelemetry-go-build-tools/tree/main/multimod). All code block examples provided below correspond to an update to version `v0.7.0`, please update accordingly.

## 1. Update the New Release Version

* Create a new branch for the release version update.
```sh
git checkout -b release/v0.7.0
```

* Modify the `versions.yaml` file to update the version for VMClarity's module-set. Keep in mind that the same version is applied to all modules.
```diff
vmclarity:
- version: v0.6.0
+ version: v0.7.0
```

* Commit the changes with a suitable message.
```sh
git add versions.yaml
git commit -m "release: update module set to version v0.7.0"
```

* Run the version verification command to check for any issues.
```sh
make multimod-verify
```

## 2. Bump All Dependencies to the New Release Version

* Run the following command to update all `go.mod` files to the new release version.
```sh
make multimod-prerelease
```

* Review the changes made in the last commit to ensure correctness.

* Push the branch to the GitHub repository.
```sh
git push origin release/v0.7.0
```

* Create a pull request for these changes with a title like "release: prepare version v0.7.0".

## 3. Create and Push Tags

* After the pull request is approved and merged, update your local main branch.
```sh
git checkout main
git pull origin main
```

* To trigger the release workflow, create and push to the repository a release tag for the last commit.
```sh
git tag -a v0.7.0
git push origin v0.7.0
```

Please note that the release tag is not necessarily associated with the "release: prepare version v0.7.0" commit. For example, if any bug fixes were required after this commit, they can be merged and included in the release.

## Post-release Checks
Verify that the `Release` workflow was completed successfully in the GitHub Actions section.
Ensure that the release is visible in the GitHub releases page. Additionally, check that the release description is correct and all assets are listed.
12 changes: 12 additions & 0 deletions makefile.d/20-tools.mk
Original file line number Diff line number Diff line change
Expand Up @@ -231,3 +231,15 @@ bin/typos-$(TYPOS_VERSION): | $(BIN_DIR)
@curl -sSfL 'https://github.com/crate-ci/typos/releases/download/v$(TYPOS_VERSION)/typos-v$(TYPOS_VERSION)-$(TYPOS_ARCH)-$(TYPOS_OSTYPE).tar.gz' --output - \
| tar xzvOf - './typos' > $@
@chmod +x $@

####
## Go MultiMod Releaser
####

MULTIMOD_BIN := $(BIN_DIR)/multimod
MULTIMOD_REPO_DIR := $(BIN_DIR)/opentelemetry-go-build-tools

bin/multimod:
@if [ ! -d $(MULTIMOD_REPO_DIR) ]; then git clone [email protected]:open-telemetry/opentelemetry-go-build-tools.git $(MULTIMOD_REPO_DIR); fi
@cd $(MULTIMOD_REPO_DIR)/multimod && go build -o $(MULTIMOD_BIN) main.go
@rm -rf $(MULTIMOD_REPO_DIR)
21 changes: 21 additions & 0 deletions versions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
module-sets:
vmclarity:
version: v0.6.0
modules:
- github.com/openclarity/vmclarity/uibackend/types
- github.com/openclarity/vmclarity/uibackend/server
- github.com/openclarity/vmclarity/uibackend/client
- github.com/openclarity/vmclarity/core
- github.com/openclarity/vmclarity/provider
- github.com/openclarity/vmclarity/utils
- github.com/openclarity/vmclarity/installation
- github.com/openclarity/vmclarity/cli
- github.com/openclarity/vmclarity/testenv
- github.com/openclarity/vmclarity/api/types
- github.com/openclarity/vmclarity/api/server
- github.com/openclarity/vmclarity/api/client
- github.com/openclarity/vmclarity/e2e
- github.com/openclarity/vmclarity/containerruntimediscovery/types
- github.com/openclarity/vmclarity/containerruntimediscovery/server
- github.com/openclarity/vmclarity/containerruntimediscovery/client
- github.com/openclarity/vmclarity/orchestrator
Loading