Skip to content

Merge pull request #656 from gdsfactory/dependabot/pre_commit/https-/… #354

Merge pull request #656 from gdsfactory/dependabot/pre_commit/https-/…

Merge pull request #656 from gdsfactory/dependabot/pre_commit/https-/… #354

Workflow file for this run

name: Release
on:
push:
branches:
- main
jobs:
check_and_tag:
name: Check for version bump and create tag
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.get_version.outputs.tag }}
new_tag_created: ${{ steps.check_tag.outputs.new_tag }}
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Get version
id: get_version
run: |
VERSION=$(grep -m 1 '^version =' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=v$VERSION" >> "$GITHUB_OUTPUT"
- name: Check if tag exists and create if not
id: check_tag
run: |
TAG=${{ steps.get_version.outputs.tag }}
if git ls-remote --exit-code --tags origin "refs/tags/$TAG"; then
echo "Tag $TAG already exists. No new release will be created."
echo "new_tag=false" >> "$GITHUB_OUTPUT"
else
echo "Tag $TAG does not exist. Creating and pushing tag."
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a "$TAG" -m "Release ${{ steps.get_version.outputs.version }}"
git push origin "$TAG"
echo "new_tag=true" >> "$GITHUB_OUTPUT"
fi
build:
needs: check_and_tag
if: needs.check_and_tag.outputs.new_tag_created == 'true'
permissions:
contents: read
uses: ./.github/workflows/build.yml
release_environment:
needs: check_and_tag
if: needs.check_and_tag.outputs.new_tag_created == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
- name: Generate SBOM
run: |
uv run --all-extras --with cyclonedx-bom cyclonedx-py environment --pyproject pyproject.toml --output-format JSON --output-file sbom.json
- name: Create Release
run: |
# Get the latest draft release tag if it exists
DRAFT_TAG=$(gh release list --limit 1 --json isDraft,tagName --jq '.[] | select(.isDraft==true) | .tagName' || echo "")
if [ -n "$DRAFT_TAG" ]; then
# Get the body of the draft release
DRAFT_BODY=$(gh release view "$DRAFT_TAG" --json body --jq '.body' || echo "")
# Create release with draft body
gh release create ${{ needs.check_and_tag.outputs.tag }} \
--title "${{ needs.check_and_tag.outputs.tag }}" \
--notes "$DRAFT_BODY" \
sbom.json
else
# Create release with auto-generated notes
gh release create ${{ needs.check_and_tag.outputs.tag }} \
--title "${{ needs.check_and_tag.outputs.tag }}" \
--generate-notes \
sbom.json
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release_pypi:
needs: [check_and_tag, build]
if: needs.check_and_tag.outputs.new_tag_created == 'true'
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/qpdk
permissions:
id-token: write
steps:
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: dist
path: dist
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
with:
packages-dir: dist