From 9ec095fefd23cb887ea5cc8ecafa30595e96fa69 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 12 Sep 2024 18:16:22 +0100 Subject: [PATCH 1/2] Add release steps --- README.md | 6 +++++- RELEASING.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 RELEASING.md diff --git a/README.md b/README.md index 73fc551..8b6e96e 100644 --- a/README.md +++ b/README.md @@ -137,4 +137,8 @@ Before submitting a PR, make sure to lint your code: ``` ./scripts-dev/lint.sh -``` \ No newline at end of file +``` + +### Creating a new release + +See [RELEASING.md](RELEASING.md). \ No newline at end of file diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 0000000..d1ff4c5 --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,45 @@ +# Releasing `mscbot-python` + +To make a new release of `mscbot-python`, perform the following. + +1. Determine the new version number. This project follows [semantic versioning](https://semver.org/). Store the release version in an environment variable called `RELEASE_VERSION`. + + ``` + export RELEASE_VERSION=X.Y.Z + ``` + + **Note:** Do not include a `v` before the version number. + +1. Update `setup.py` with the new version number: + + ``` + sed -i "s/version=\"[0-9]\+\.[0-9]\+\.[0-9]\+\"/version=\"${RELEASE_VERSION}\"/" setup.py + ``` + +1. Stage, commit and push the changes: + + ``` + git add setup.py + git commit -m "$RELEASE_VERSION" + ``` + +1. Create a new git tag: + + ``` + git tag $RELEASE_VERSION -m "$RELEASE_VERSION" + ``` + +1. Push the tag to the repository: + + ``` + git push origin $RELEASE_VERSION + ``` + +1. [Create a new release](https://github.com/matrix-org/mscbot-python/releases/new) + on GitHub. + Select the tag that was just created and click "Generate release notes". + + **Note:** A docker image will be automatically created and uploaded to + DockerHub and the GitHub container repository when a release is published. + +1. Press "Publish release", and you're done! 🍾 \ No newline at end of file From 2a7334519b96396b8453512971307f0df2b74ec7 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Wed, 18 Sep 2024 19:15:11 +0100 Subject: [PATCH 2/2] Add docker build/publish CI --- .../workflows/build-and-publish-docker.yml | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/build-and-publish-docker.yml diff --git a/.github/workflows/build-and-publish-docker.yml b/.github/workflows/build-and-publish-docker.yml new file mode 100644 index 0000000..7aac29c --- /dev/null +++ b/.github/workflows/build-and-publish-docker.yml @@ -0,0 +1,61 @@ +name: Publish Docker images + +on: + release: + types: [published] + workflow_dispatch: + +jobs: + push_to_registry: + name: Push Docker image to Docker Hub and GHCR + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + attestations: write + id-token: write + steps: + - name: Check out the repo + uses: actions/checkout@v4 + + - name: Extract version from setup.py + # Note: explicitly requesting bash will mean bash is invoked with `-eo pipefail`, see + # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell + shell: bash + run: | + echo "RELEASE_VERSION=$(grep "^version" setup.py | sed -E 's/\s*version\s*=\s*["]([^"]*)["],/\1/')" >> $GITHUB_ENV + + - name: Log in to Docker Hub + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PERSONAL_ACCESS_TOKEN }} + + - name: Log in to GitHub Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ghcr.io + # Login as the user that published the release. + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: | + docker.io/matrixdotorg/mscbot-python + ghcr.io/matrix-org/mscbot-python + + - name: Build and push images + id: push + uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 + with: + context: . + file: ./Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: | + gitsha1=${{ github.sha }} + org.opencontainers.image.version=${{ env.RELEASE_VERSION }} + ${{ steps.meta.outputs.labels }}