From 1ee6c4f416d0c36d48670c7b1412890b1dc5ff45 Mon Sep 17 00:00:00 2001 From: Daniel Baxter Date: Wed, 5 Feb 2025 14:53:23 -0500 Subject: [PATCH] ci: automatically create a release if pyproject.toml is updated and the version is not already tagged (#85) This Action should run each time `pyproject.toml` is updated on `main` It will obtain the version number from `pyproject.toml` It will check that version number to ensure isn't already a Tag It will create the Tag and Release if it doesn't exist --- .github/workflows/autogenerate-release.yml | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .github/workflows/autogenerate-release.yml diff --git a/.github/workflows/autogenerate-release.yml b/.github/workflows/autogenerate-release.yml new file mode 100644 index 0000000..7857aeb --- /dev/null +++ b/.github/workflows/autogenerate-release.yml @@ -0,0 +1,54 @@ +name: Release on pyproject.toml Update + +on: + push: + branches: + - main + paths: + - "pyproject.toml" + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Extract version from pyproject.toml + id: extract_version + run: | + VERSION=$(grep '^version =' pyproject.toml | awk -F' = ' '{print $2}' | tr -d '"') + echo "::set-output name=version::$VERSION" + + - name: Check if tag exists + id: check_tag + uses: actions/github-script@v4 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const tagName = 'v${{ steps.extract_version.outputs.version }}'; + const { data: tags } = await github.git.listMatchingRefs({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: `tags/${tagName}` + }); + if (tags.length > 0) { + console.log(`Tag ${tagName} already exists. Skipping release creation.`); + core.setOutput('tag_exists', 'true'); + } else { + console.log(`Tag ${tagName} does not exist. Proceeding with release creation.`); + core.setOutput('tag_exists', 'false'); + } + + - name: Create Release + if: steps.check_tag.outputs.tag_exists == 'false' + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ steps.extract_version.outputs.version }} + release_name: Release v${{ steps.extract_version.outputs.version }} + draft: false + prerelease: false