From 46ca1a79602c271999c72ad13973b1c72957f160 Mon Sep 17 00:00:00 2001 From: Simon Lemieux <1105380+simlmx@users.noreply.github.com> Date: Thu, 16 Mar 2023 18:23:34 +0000 Subject: [PATCH] Reuse workflows Instead of copy pasting a lot of code between workflows, we reuse "atomic" workflows. In particular we fix the workflow that bumps the version and we add one that solely build and publishes a docker image. Also: * Support submodules in docker-release-only workflow * Rename "new_tag" -> "new_ver" * Bump jasonamyers/github-bumpversion-action to 1.0.5 * Uniformize job names * Remove `workdir` option (it wasn't used anywhere) --- .github/workflows/bump-version.yml | 15 +++- .github/workflows/docker-release-only.yml | 72 +++++++++++++++++++ .github/workflows/docker-release.yml | 67 ++++------------- .github/workflows/python-docker-release.yml | 79 ++++++--------------- .github/workflows/python-release.yml | 41 +++-------- .github/workflows/python-test.yml | 8 --- 6 files changed, 127 insertions(+), 155 deletions(-) create mode 100644 .github/workflows/docker-release-only.yml diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml index 6f67632..d4c4547 100644 --- a/.github/workflows/bump-version.yml +++ b/.github/workflows/bump-version.yml @@ -1,16 +1,25 @@ +# Bump the version of the repo and push the new version in a new commit. + name: Bump version +on: + workflow_call: + outputs: + new_ver: + description: New version number + value: ${{ jobs.bump-version.outputs.new_ver }} + jobs: - build: + bump-version: runs-on: ubuntu-latest outputs: - new_tag: ${{ steps.bumper.outputs.new_ver }} + new_ver: ${{ steps.bumper.outputs.new_ver }} steps: - uses: actions/checkout@v2 - name: Bump version and push tag id: bumper - uses: jasonamyers/github-bumpversion-action@v1.0.3 + uses: jasonamyers/github-bumpversion-action@v1.0.5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Push changes diff --git a/.github/workflows/docker-release-only.yml b/.github/workflows/docker-release-only.yml new file mode 100644 index 0000000..6f92724 --- /dev/null +++ b/.github/workflows/docker-release-only.yml @@ -0,0 +1,72 @@ +# Build and release a docker to Docker Hub + +name: Docker release + +on: + workflow_call: + secrets: + DOCKERHUB_USERNAME: + required: true + DOCKERHUB_TOKEN: + required: true + inputs: + image_base_name: + required: true + type: string + docker_file: + required: false + type: string + default: Dockerfile + tag_value: + required: true + type: string + checkout_submodules: + description: Forwarded to `submodule` input of the `actions/checkout` step. + type: boolean + required: false + # Default: false + # See: https://github.com/actions/checkout/tree/v2 + default: false + +jobs: + docker-release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: main + submodules: ${{ inputs.checkout_submodules }} + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + # list of Docker images to use as base name for tags + # TODO make more flexible + images: | + openclimatefix/${{ inputs.image_base_name }} + tags: | + type=raw,value=${{ inputs.tag_value }} + flavor: | + latest=true + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: openclimatefix + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + file: ${{ inputs.docker_file }} + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index 955bb97..6caa553 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -1,4 +1,9 @@ +# Shortcut that runs both +# * bump-version.yml +# * docker-release-only.yml + name: Bump version and auto-release + on: workflow_call: secrets: @@ -17,61 +22,13 @@ on: jobs: bump-version: - runs-on: ubuntu-latest - outputs: - new_tag: ${{ steps.bumper.outputs.new_ver }} - steps: - - uses: actions/checkout@v2 - - name: Bump version - id: bumper - uses: jasonamyers/github-bumpversion-action@v1.0.3 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Push changes - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - tags: true + uses: openclimatefix/.github/.github/workflows/bump-version.yml@v1.1.0 docker-release: needs: [bump-version] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: main - - run: echo ${{ needs.bump-version.outputs.new_tag }} - - name: Docker meta - id: meta - uses: docker/metadata-action@v3 - with: - # list of Docker images to use as base name for tags - # TODO make more flexible - images: | - openclimatefix/${{ inputs.image_base_name }} - tags: | - type=raw,value=${{ needs.bump-version.outputs.new_tag }} - flavor: | - latest=true - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: openclimatefix - password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - file: ${{ inputs.docker_file }} - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + uses: openclimatefix/.github/.github/workflows/docker-release-only.yml@v1.1.0 + with: + image_base_name: ${{inputs.image_base_name}} + docker_file: ${{inputs.docker_file}} + tag_value: ${{ needs.bump-version.outputs.new_ver }} + secrets: inherit diff --git a/.github/workflows/python-docker-release.yml b/.github/workflows/python-docker-release.yml index 85469dd..a442eea 100644 --- a/.github/workflows/python-docker-release.yml +++ b/.github/workflows/python-docker-release.yml @@ -1,3 +1,9 @@ +# Shortcut to run the following: +# * bump-version.yml +# * Publish the python package +# * Create a release in github +# * docker-release-only.yml + name: Bump version and auto-release on: workflow_call: @@ -18,22 +24,14 @@ on: default: Dockerfile jobs: + bump-version: + uses: openclimatefix/.github/.github/workflows/bump-version.yml@v1.1.0 + build: + needs: [bump-version] runs-on: ubuntu-latest - outputs: - new_tag: ${{ steps.bumper.outputs.new_ver }} steps: - - uses: actions/checkout@v2 - - name: Bump version and push tag - id: bumper - uses: jasonamyers/github-bumpversion-action@v1.0.3 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Push changes - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - tags: true + - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v2 with: @@ -51,10 +49,9 @@ jobs: password: ${{ secrets.token }} python-release: - needs: [build] + needs: [bump-version, build] runs-on: ubuntu-latest steps: - - run: echo ${{needs.build.outputs.new_tag}} - name: Changelog uses: scottbrenner/generate-changelog-action@master id: Changelog @@ -66,52 +63,18 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: v${{ needs.build.outputs.new_tag }} - release_name: v${{ needs.build.outputs.new_tag }} + tag_name: v${{ needs.bump-version.outputs.new_ver }} + release_name: v${{ needs.bump-version.outputs.new_ver }} body: | ${{ steps.Changelog.outputs.changelog }} draft: false prerelease: false docker-release: - needs: [build, python-release] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: main - - run: echo ${{ needs.build.outputs.new_tag }} - - name: Docker meta - id: meta - uses: docker/metadata-action@v3 - with: - # list of Docker images to use as base name for tags - # TODO make more flexible - images: | - openclimatefix/${{ inputs.image_base_name }} - tags: | - type=raw,value=${{ needs.build.outputs.new_tag }} - flavor: | - latest=true - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: openclimatefix - password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - file: ${{ inputs.docker_file }} - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + needs: [bump-version, build, python-release] + uses: openclimatefix/.github/.github/workflows/docker-release-only.yml@v1.1.0 + with: + image_base_name: ${{inputs.image_base_name}} + docker_file: ${{inputs.docker_file}} + tag_value: ${{ needs.bump-version.outputs.new_ver }} + secrets: inherit diff --git a/.github/workflows/python-release.yml b/.github/workflows/python-release.yml index 236ea6e..db33ac8 100644 --- a/.github/workflows/python-release.yml +++ b/.github/workflows/python-release.yml @@ -1,22 +1,17 @@ name: Bump version and auto-release on: workflow_call: - inputs: - workdir: - description: 'The directory of the root of the python project' - default: '.' - required: false - type: string secrets: token: required: true jobs: + bump-version: + uses: openclimatefix/.github/.github/workflows/bump-version.yml@v1.1.0 + build: + needs: [bump-version] runs-on: ubuntu-latest - defaults: - run: - working-directory: ${{ inputs.workdir }} steps: - uses: actions/checkout@v3 @@ -32,30 +27,15 @@ jobs: run: python -m build publish: + needs: [bump-version, build] runs-on: ubuntu-latest - defaults: - run: - working-directory: ${{ inputs.workdir }} - needs: ["build"] - outputs: - new_tag: ${{ steps.bumper.outputs.new_ver }} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - - name: Bump version - id: bumper - uses: jasonamyers/github-bumpversion-action@v1.0.3 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SOURCE: ${{ inputs.workdir }} - - name: Push changes - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - tags: true + - name: Set up Python uses: actions/setup-python@v2 with: @@ -71,14 +51,13 @@ jobs: with: user: __token__ password: ${{ secrets.token }} - packages_dir: ${{ inputs.workdir }}/dist + packages_dir: ./dist release: - needs: [publish] + needs: [bump-version, publish] runs-on: ubuntu-latest steps: - - run: echo ${{needs.publish.outputs.new_tag}} - name: Changelog uses: scottbrenner/generate-changelog-action@master id: Changelog @@ -90,8 +69,8 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: v${{ needs.publish.outputs.new_tag }} - release_name: v${{ needs.publish.outputs.new_tag }} + tag_name: v${{ needs.bump-version.outputs.new_ver }} + release_name: v${{ needs.bump-version.outputs.new_ver }} body: | ${{ steps.Changelog.outputs.changelog }} draft: false diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index f05e00e..f599d34 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -25,11 +25,6 @@ on: default: '["ubuntu-latest", "macos-latest"]' type: string required: false - workdir: - description: 'The directory of the root of the python project' - default: '.' - required: false - type: string python-version: description: 'The python versions to use' default: "['3.9', '3.10']" @@ -50,9 +45,6 @@ jobs: python-version: ${{ fromJson(inputs.python-version) }} os: "${{ fromJSON(inputs.os_list) }}" runs-on: ${{ matrix.os }} - defaults: - run: - working-directory: ${{ inputs.workdir }} steps: - uses: actions/checkout@v3