Skip to content

Commit

Permalink
Simplify process of making releases (#582)
Browse files Browse the repository at this point in the history
* Add workflow for (1) drafting release, (2) uploading Docker images

* Allow manual trigger for docker image uploads and update path to JARs for draft release

* Update release steps in documentation

* Skip maven tests in CI for draft release and Docker image

* Explicitly mention in 'Release steps' that you need to make a new branch
  • Loading branch information
Sophietje authored Jan 14, 2025
1 parent 7608bb2 commit fc4046e
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 28 deletions.
48 changes: 48 additions & 0 deletions .github/workflows/docker-image-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Release Docker images

on:
release:
types: [published]
workflow_dispatch:

jobs:
release:
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' || (github.event_name == 'release' && github.event.prerelease == false)

steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Build JARs
run: mvn -Dmaven.test.skip=true package
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push Knowledge Directory Docker image
uses: docker/build-push-action@v6
with:
context: ./knowledge-directory
platforms: linux/amd64, linux/arm64
tags: ghcr.io/tno/knowledge-engine/knowledge-directory:${{ github.event.release.tag_name }}
push: true
- name: Build and push Smart Connector Docker image
uses: docker/build-push-action@v6
with:
context: ./smart-connector-rest-dist
platforms: linux/amd64, linux/arm64
tags: ghcr.io/tno/knowledge-engine/smart-connector:${{ github.event.release.tag_name }}
push: true
- name: Build and push Admin UI Docker image
uses: docker/build-push-action@v6
with:
context: ./admin-ui
platforms: linux/amd64, linux/arm64
tags: ghcr.io/tno/knowledge-engine/admin-ui:${{ github.event.release.tag_name }}
push: true
42 changes: 42 additions & 0 deletions .github/workflows/draft-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Make draft release

on:
workflow_dispatch:
inputs:
version:
description: "Version for new release (X.Y.Z)"
required: true
type: string

env:
MAVEN_OPTS: -Dmaven.test.skip=true -Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true
MAVEN_CLI_OPTS: --batch-mode --errors --fail-at-end --show-version

jobs:
setup:
runs-on: ubuntu-latest
container:
image: maven:3.9.9-eclipse-temurin-17-focal
options: --user 1001

steps:
- uses: actions/checkout@v4
- name: Build JARs
run: mvn $MAVEN_CLI_OPTS package
- name: Create tag
run: |
git config user.email "github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
git tag -a ${{ inputs.version }} -m ${{ inputs.version }}
git push origin ${{ inputs.version }}
- name: Draft release
uses: softprops/action-gh-release@v2
with:
working-directory: ${{ github.workspace }}
files: |
smart-connector-rest-dist/target/smart-connector-rest-dist-${{ inputs.version }}-with-dependencies.jar
knowledge-directory/target/knowledge-directory-${{ inputs.version }}-with-dependencies.jar
tag_name: ${{ inputs.version }}
draft: true
generate_release_notes: true
make_latest: true
34 changes: 6 additions & 28 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -205,37 +205,15 @@ These are instructions on what to do when we release a new version of the knowle
- all `pom.xml` files
- `openapi-sc.yaml` version
- Docker image tags in the Docker Compose examples.
2. Make a commit for the release, and tag it with `git tag {x}.{y}.{z}`.
3. `mvn deploy` (for this you need `Deploy-Token` or `Private-Token` configured in your Maven's `settings.xml`, see [GitLab's documentation on this](https://docs.gitlab.com/ee/user/packages/maven_repository/#authenticate-to-the-package-registry-with-maven))
4. Push the commit and the tag.
5. Build and push the new Docker images to GitLab:

```bash
docker buildx build ./smart-connector-rest-dist --platform linux/arm64,linux/amd64 --tag docker-registry.inesctec.pt/interconnect/knowledge-engine/smart-connector-rest-dist:1.2.5 --push
docker buildx build ./knowledge-directory --platform linux/arm64,linux/amd64 --tag docker-registry.inesctec.pt/interconnect/knowledge-engine/knowledge-directory:1.2.5 --push
docker buildx build ./admin-ui --platform linux/arm64,linux/amd64 --tag docker-registry.inesctec.pt/interconnect/knowledge-engine/admin-ui:1.2.5 --push
```

6. Build and push the new Docker images to GitHub:

```bash
docker buildx build ./smart-connector-rest-dist --platform linux/arm64,linux/amd64 --tag ghcr.io/tno/knowledge-engine/smart-connector:1.2.5 --push
docker buildx build ./knowledge-directory --platform linux/arm64,linux/amd64 --tag ghcr.io/tno/knowledge-engine/knowledge-directory:1.2.5 --push
docker buildx build ./admin-ui --platform linux/arm64,linux/amd64 --tag ghcr.io/tno/knowledge-engine/admin-ui:1.2.5 --push
```

7. Prepare the next SNAPSHOT version and make a commit for that too.
2. Make a commit and push it to a new branch for the release.
3. Make a Pull Request and merge it into master after tests have succeeded.
4. Go to Actions on GitHub and trigger the workflow "Make draft release" with the new version as input.
5. When the workflow is finished, go to the newly generated draft release. Check the release notes, make any changes if necessary, and publish the release.
6. Prepare the next SNAPSHOT version and make a commit for that in a PR and merge into master.
1. `openapi-sc.yaml`
2. `pom.xml`
3. Leave the non-SNAPSHOT version in this README, and in the Docker Compose examples.
8. In GitLab, create a new release at https://gitlab.inesctec.pt/interconnect/knowledge-engine/-/releases
1. Use the new tag for the release
2. Write release notes
3. Find the latest version of the package at https://gitlab.inesctec.pt/interconnect/knowledge-engine/-/packages/976 and copy the link to the JAR with dependencies. Include it in "Release assets" with type "Package" and link title "Knowledge Engine REST server JAR (with dependencies)" (see previous releases)
9. In GitHub, create a new release at https://github.com/TNO/knowledge-engine/releases/new
1. Use the new tag for the release
2. Include the same release notes
10. Inform mailing list(s) (and [the blog](https://www.knowledge-engine.eu/blog/)) about the new release.
7. Inform mailing list(s) (and [the blog](https://www.knowledge-engine.eu/blog/)) about the new release.

## Code conventions
The code conventions of the knowledge-engine can be found in the `/ide` folder in the Eclipse IDE format. The format can often also be imported in other Java IDEs like IntelliJ, VSCode or Netbeans.
Expand Down

0 comments on commit fc4046e

Please sign in to comment.