| 
 | 1 | +---  | 
 | 2 | +# yamllint disable rule:truthy rule:line-length  | 
 | 3 | +name: New Release  | 
 | 4 | + | 
 | 5 | +on:  | 
 | 6 | +  release:  | 
 | 7 | +    types:  | 
 | 8 | +      - published  | 
 | 9 | + | 
 | 10 | +jobs:  | 
 | 11 | +  check_release:  | 
 | 12 | +    runs-on: ubuntu-22.04  | 
 | 13 | +    outputs:  | 
 | 14 | +      is_prerelease: ${{ steps.release.outputs.is_prerelease }}  | 
 | 15 | +      is_devrelease: ${{ steps.release.outputs.is_devrelease }}  | 
 | 16 | +      version: ${{ steps.release.outputs.version }}  | 
 | 17 | +      major_minor_version: ${{ steps.release.outputs.major_minor_version }}  | 
 | 18 | +      latest_tag: ${{ steps.release.outputs.latest_tag }}  | 
 | 19 | +    steps:  | 
 | 20 | +      - name: "Check out repository code"  | 
 | 21 | +        uses: "actions/checkout@v4"  | 
 | 22 | +        with:  | 
 | 23 | +          submodules: true  | 
 | 24 | + | 
 | 25 | +      - name: "Set up Python"  | 
 | 26 | +        uses: "actions/setup-python@v5"  | 
 | 27 | +        with:  | 
 | 28 | +          python-version: "3.12"  | 
 | 29 | + | 
 | 30 | +      - name: "Install Poetry"  | 
 | 31 | +        uses: "snok/install-poetry@v1"  | 
 | 32 | +        with:  | 
 | 33 | +          virtualenvs-create: true  | 
 | 34 | +          virtualenvs-in-project: true  | 
 | 35 | +          installer-parallel: true  | 
 | 36 | + | 
 | 37 | +      - name: "Setup Python environment"  | 
 | 38 | +        run: |  | 
 | 39 | +          poetry config virtualenvs.create true --local  | 
 | 40 | +          poetry env use 3.12  | 
 | 41 | +      - name: "Install dependencies"  | 
 | 42 | +        run: "poetry install --no-interaction --no-ansi"  | 
 | 43 | + | 
 | 44 | +      - name: "Check prerelease type"  | 
 | 45 | +        id: release  | 
 | 46 | +        run: |  | 
 | 47 | +          echo is_prerelease=$(poetry run python -c "from packaging.version import Version; print(int(Version('$(poetry version -s)').is_prerelease))") >> "$GITHUB_OUTPUT"  | 
 | 48 | +          echo is_devrelease=$(poetry run python -c "from packaging.version import Version; print(int(Version('$(poetry version -s)').is_devrelease))") >> "$GITHUB_OUTPUT"  | 
 | 49 | +          echo "version=$(poetry version -s)" >> "$GITHUB_OUTPUT"  | 
 | 50 | +          echo major_minor_version=$(poetry run python -c "from packaging.version import Version; print(f\"{Version('$(poetry version -s)').major}.{Version('$(poetry version -s)').minor}\")") >> "$GITHUB_OUTPUT"  | 
 | 51 | +          echo latest_tag=$(curl -L \  | 
 | 52 | +              -H "Accept: application/vnd.github+json" \  | 
 | 53 | +              -H "Authorization: Bearer ${{ github.token }}" \  | 
 | 54 | +              -H "X-GitHub-Api-Version: 2022-11-28" \  | 
 | 55 | +              https://api.github.com/repos/${{ github.repository }}/releases/latest \  | 
 | 56 | +              | jq -r '.tag_name') >> "$GITHUB_OUTPUT"  | 
 | 57 | +
  | 
 | 58 | +      - name: Check tag version  | 
 | 59 | +        if: github.event.release.tag_name != format('infrahub-v{0}', steps.release.outputs.version)  | 
 | 60 | +        run: |  | 
 | 61 | +          echo "Tag version does not match python project version"  | 
 | 62 | +          exit 1  | 
 | 63 | +
  | 
 | 64 | +      - name: Check prerelease and project version  | 
 | 65 | +        if: github.event.release.prerelease == true && steps.release.outputs.is_prerelease == 0 && steps.release.outputs.is_devrelease == 0  | 
 | 66 | +        run: |  | 
 | 67 | +          echo "Cannot pre-release a non pre-release or non dev-release version (${{ steps.release.outputs.version }})"  | 
 | 68 | +          exit 1  | 
 | 69 | +
  | 
 | 70 | +      - name: Check release and project version  | 
 | 71 | +        if: github.event.release.prerelease == false && (steps.release.outputs.is_prerelease == 1 || steps.release.outputs.is_devrelease == 1)  | 
 | 72 | +        run: |  | 
 | 73 | +          echo "Cannot release a pre-release or dev-release version (${{ steps.release.outputs.version }})"  | 
 | 74 | +          exit 1  | 
 | 75 | +
  | 
 | 76 | +  publish-pypi:  | 
 | 77 | +    needs: check_release  | 
 | 78 | +    uses: ./.github/workflows/publish-pypi.yml  | 
 | 79 | +    secrets: inherit  | 
 | 80 | +    with:  | 
 | 81 | +      publish: true  | 
 | 82 | + | 
 | 83 | +  update-submodule:  | 
 | 84 | +    needs: check_release  | 
 | 85 | +    uses: ./.github/workflows/update-submodule.yml  | 
 | 86 | +    secrets: inherit  | 
 | 87 | +    with:  | 
 | 88 | +      version: ${{ github.ref_name }}  | 
0 commit comments