File: release.yml

package info (click to toggle)
cyclonedx-python-lib 11.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,092 kB
  • sloc: xml: 20,462; python: 13,061; makefile: 21; sh: 16
file content (155 lines) | stat: -rw-r--r-- 5,510 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
name: Release

on:
  workflow_dispatch:
    inputs:
      release_force:
        # see https://python-semantic-release.readthedocs.io/en/latest/github-action.html#command-line-options
        description: |
          Force release be one of: [major | minor | patch | prerelease]
          Leave empty for auto-detect based on commit messages.
        type: choice
        options:
          - ""         # auto - no force
          - major      # force major
          - minor      # force minor
          - patch      # force patch
          - prerelease # force prerelease
        default: ""
        required: false
      prerelease_token:
        description: 'The "prerelease identifier" to use as a prefix for the "prerelease" part of a semver. Like the rc in `1.2.0-rc.8`.'
        type: choice
        options:
          - rc
          - beta
          - alpha
        default: rc
        required: false
      prerelease:
        description: "Is a pre-release"
        type: boolean
        default: false
        required: false

concurrency:
  group: deploy
  cancel-in-progress: false  # prevent hickups with semantic-release

permissions: {}

env:
  PYTHON_VERSION_DEFAULT: "3.14"
  POETRY_VERSION: "1.8.1"

jobs:
  quicktest:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        # see https://github.com/actions/checkout
        uses: actions/checkout@v6
      - name: Setup Python Environment
        # see https://github.com/actions/setup-python
        uses: actions/setup-python@v6
        with:
          python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
          architecture: 'x64'
      - name: Install poetry
        # see https://github.com/marketplace/actions/setup-poetry
        uses: Gr1N/setup-poetry@v9
        with:
          poetry-version: ${{ env.POETRY_VERSION }}
      - name: Install dependencies
        run: poetry install --no-root
      - name: Run tox
        run: poetry run tox run -e py -s false

  deptry:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        # see https://github.com/actions/checkout
        uses: actions/checkout@v6
      - name: Setup Python Environment
        # see https://github.com/actions/setup-python
        uses: actions/setup-python@v6
        with:
          python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
          architecture: 'x64'
      - name: Install poetry
        # see https://github.com/marketplace/actions/setup-poetry
        uses: Gr1N/setup-poetry@v9
        with:
          poetry-version: ${{ env.POETRY_VERSION }}
      - name: Install dependencies
        run: poetry install --no-root
      - name: Run tox
        run: poetry run tox run -e deptry -s false

  release:
    needs:
      - quicktest
      - deptry
    # https://github.community/t/how-do-i-specify-job-dependency-running-in-another-workflow/16482
    # limit this to being run on regular commits, not the commits that semantic-release will create
    # but also allow manual workflow dispatch
    if: "!contains(github.event.head_commit.message, 'chore(release):')"
    runs-on: ubuntu-latest
    permissions:
      # NOTE: this enables trusted publishing.
      # See https://github.com/pypa/gh-action-pypi-publish/tree/release/v1#trusted-publishing
      # and https://blog.pypi.org/posts/2023-04-20-introducing-trusted-publishers/
      id-token: write
      contents: write
    steps:
      - name: Checkout code
        # see https://github.com/actions/checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Setup python
        # see https://github.com/actions/setup-python
        uses: actions/setup-python@v6
        with:
          python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
          architecture: 'x64'
      - name: Install and configure Poetry
        # See https://github.com/marketplace/actions/install-poetry-action
        uses: snok/install-poetry@v1
        with:
          version: ${{ env.POETRY_VERSION }}
          virtualenvs-create: true
          virtualenvs-in-project: true
          installer-parallel: true
      - name: Install dependencies
        run: poetry install --no-root
      - name: View poetry version
        run: poetry --version

      - name: Python Semantic Release
        id: release
        # see https://python-semantic-release.readthedocs.io/en/latest/automatic-releases/github-actions.html
        # see https://github.com/python-semantic-release/python-semantic-release
        uses: python-semantic-release/python-semantic-release@v10.0.2
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          force: ${{ github.event.inputs.release_force }}
          prerelease: ${{ github.event.inputs.prerelease }}
          prerelease_token: ${{ github.event.inputs.prerelease_token }}

      - name: Publish package distributions to PyPI
        if: steps.release.outputs.released == 'true'
        # see https://github.com/pypa/gh-action-pypi-publish
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          attestations: true

      - name: Publish package distributions to GitHub Releases
        if: steps.release.outputs.released == 'true'
        # see https://python-semantic-release.readthedocs.io/en/latest/automatic-releases/github-actions.html#python-semantic-release-publish-action
        uses: python-semantic-release/publish-action@v10
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          tag: ${{ steps.release.outputs.tag }}