From d5dd7907fb4b906c170c6f0a5f34f4551a553910 Mon Sep 17 00:00:00 2001 From: Luke Tainton Date: Wed, 7 May 2025 01:32:03 +0200 Subject: [PATCH] Update .gitea/workflows/release.yml --- .gitea/workflows/release.yml | 234 ++++++++++++++++++++++++----------- 1 file changed, 164 insertions(+), 70 deletions(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index bdc6c42..9519a29 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -5,90 +5,184 @@ on: - cron: "0 9 * * 0" jobs: - test: - name: Test - uses: https://git.tainton.uk/repos/roboluke/.gitea/workflows/ci.yml@main - with: - python-version: 3.13 - secrets: - SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST_URL }} - SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} - SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - - # create_release: - # name: Create Release - # needs: test - # uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/create-release.yml@main + # test: + # name: Test + # uses: https://git.tainton.uk/repos/roboluke/.gitea/workflows/ci.yml@main + # with: + # python-version: 3.13 # secrets: - # ACTIONS_TOKEN: ${{ secrets.ACTIONS_TOKEN }} + # SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST_URL }} + # SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} + # SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} + + tag: + name: Tag release + uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/release-with-tag.yaml@main create_release: name: Create Release + needs: tag + uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/create-release-preexisting-tag.yaml@main + with: + tag: ${{ needs.tag.outputs.tag_name }} + body: ${{ needs.tag.outputs.changelog }} + secrets: + ACTIONS_TOKEN: ${{ secrets.ACTIONS_TOKEN }} + + get_release_id: + name: Get Release ID runs-on: ubuntu-latest - # needs: test + needs: [tag, create_release] outputs: - release_name: ${{ steps.get_next_version.outputs.tag }} + releaseid: ${{ steps.getid.outputs.releaseid }} steps: + - name: Get Release ID + id: getid + run: | + rid=$(curl -s -X 'GET' \ + -H 'accept: application/json' \ + '${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases/latest' | jq -r '.id') + echo "releaseid=$rid" >> "$GITEA_OUTPUT" + echo "$rid" + + build_whl: + name: Build Wheel File + needs: [tag, get_release_id] + runs-on: ubuntu-latest + steps: + - name: Check out repository code + uses: actions/checkout@v4.2.2 + with: + ref: ${{ needs.tag.outputs.tag_name }} + # - name: Setup Python + # uses: actions/setup-python@v5 + # with: + # python-version: "3.13" + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + enable-cache: true + cache-dependency-glob: "uv.lock" + - name: Set up Python + run: uv python install + - name: Update pyproject.toml + run: ./tools/update_pyproject.sh ${{ needs.tag.outputs.tag_name }} + - name: Install dependencies + run: uv sync + - name: Build wheel file + run: uv build + - name: Upload Release Asset + run: | + for file in dist/*.whl; do + curl -s -X POST \ + -H "Authorization: token ${{ secrets.ACTIONS_TOKEN }}" \ + -H "Content-Type: multipart/form-data" \ + -F "attachment=@${{ gitea.workspace }}/$file" \ + "${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases/${{ needs.get_release_id.outputs.releaseid }}/assets" + done + - name: Publish to PyPI + run: uv publish + env: + UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }} + # - name: Publish to PyPI + # uses: pypa/gh-action-pypi-publish@release/v1 + # with: + # # user: ${{ vars.PYPI_USERNAME }} + # user: __token__ + # password: ${{ secrets.PYPI_API_TOKEN }} + + # publish_pypi: + # name: Publish to PyPI + # needs: build_whl + # runs-on: ubuntu-latest + # steps: + # - name: Create dist folder + # run: mkdir -p dist + # - uses: actions/download-artifact@v4 + # with: + # name: whl + # path: dist + # - name: Publish to PyPI + # uses: pypa/gh-action-pypi-publish@release/v1 + # with: + # # user: ${{ vars.PYPI_USERNAME }} + # user: __token__ + # password: ${{ secrets.PYPI_API_TOKEN }} + + create_docker: + name: Publish Docker Images + runs-on: ubuntu-latest + needs: tag + steps: + - name: Update Docker configuration + continue-on-error: true + run: | + mkdir -p /etc/default + mkdir -p /etc/docker + touch -a /etc/default/docker + touch -a /etc/docker/daemon.json + echo "DOCKER_OPTS=\"--insecure-registry ${{ vars.PACKAGES_REGISTRY_URL }}\"" >> /etc/default/docker + echo "{\"insecure-registries\": [\"${{ vars.PACKAGES_REGISTRY_URL }}\"]}" > /etc/docker/daemon.json + + - name: Get repo name + id: split + run: echo "repo=${REPO##*/}" >> "$GITEA_OUTPUT" + env: + REPO: ${{ gitea.repository }} + - name: Check out repository uses: actions/checkout@v4.2.2 with: fetch-depth: 0 + ref: ${{ needs.tag.outputs.tag_name }} - - name: Changes since last tag - id: changes - run: | - rm -f .changes - git log $(git describe --tags --abbrev=0)..HEAD --no-merges --oneline >> .changes - cat .changes + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - - name: Check for changes - run: | - if [[ -z $(grep '[^[:space:]]' .changes) ]] ; then - echo "changes=false" - echo "changes=false" >> "$GITEA_OUTPUT" - else - echo "changes=true" - echo "changes=true" >> "$GITEA_OUTPUT" - fi - - - name: Cancel if no changes - if: steps.changes.outputs.changes == 'false' - run: exit 1 - - - name: Set server URL - id: set_srvurl - run: | - SRVURL=$(echo "${{ gitea.server_url }}" | sed 's/https:\/\/\(.*\)/\1/') - echo "srvurl=$SRVURL" >> "$GITEA_OUTPUT" - - - name: Get next version - uses: TriPSs/conventional-changelog-action@v6 - id: get_next_version + - name: Log in to Gitea Container Registry + uses: docker/login-action@v3 with: - git-url: ${{ steps.set_srvurl.outputs.srvurl }} - github-token: ${{ gitea.token }} - preset: "conventionalcommits" - # preset: "angular" # This is the default - skip-commit: true - release-count: 1 - output-file: false - create-summary: true - skip-on-empty: true - skip-version-file: true - skip-tag: true + registry: ${{ vars.PACKAGES_REGISTRY_URL }} + username: ${{ vars.ACTIONS_USERNAME }} + password: ${{ secrets.ACTIONS_TOKEN }} - - name: Create release + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ vars.GHCR_USERNAME }} + password: ${{ secrets.GHCR_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + tags: type=semver,pattern=v{{version}},value=${{ needs.tag.outputs.tag_name }} + images: | + ghcr.io/${{ vars.GHCR_USERNAME }}/${{ steps.split.outputs.repo }} + ${{ vars.PACKAGES_REGISTRY_URL }}/${{ gitea.repository }} + + - name: Print metadata run: | - curl -s -X POST \ - -H "Authorization: token ${{ secrets.ACTIONS_TOKEN }}" \ - -H "accept: application/json" \ - -H "Content-Type: application/json" \ - -d "{\"tag_name\": \"${{ steps.get_next_version.outputs.tag }}\", \"name\": \"${{ steps.get_next_version.outputs.tag }}\", \"body\": \"${{ steps.get_next_version.outputs.changelog }}\"}" \ - "${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases" + printf "Annotations:\n${{ steps.meta.outputs.annotations }}" + echo "" + printf "Labels:\n${{ steps.meta.outputs.labels }}" + echo "" + printf "Tags:\n${{ steps.meta.outputs.tags }}" - print_release: - name: Print Release - runs-on: ubuntu-latest - needs: create_release - steps: - - run: echo "Created release ${{ needs.create_release.outputs.release_name }}." + - name: Build images + uses: docker/build-push-action@v6 + with: + context: . + push: false + load: true + annotations: ${{ steps.meta.outputs.annotations }} + labels: ${{ steps.meta.outputs.labels }} + tags: ${{ steps.meta.outputs.tags }} + + - name: Push images + run: | + strtags="${{ steps.meta.outputs.tags }}" + readarray -t lines <<<"$strtags" + for element in "${lines[@]}"; do docker push "$element"; done + unset strtags lines