🚀 release (#144) #24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: [ release ] | |
| concurrency: | |
| group: ${{ github.workflow }} | |
| cancel-in-progress: false | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| SEMANTIC_RELEASE_PACKAGE: ${{ github.repository }} | |
| PYTHON_RUNTIME_VERSION: "3.11" | |
| APP_NAME: diode-netbox-plugin | |
| PYTHON_PACKAGE_NAME: netboxlabs_diode_netbox_plugin | |
| permissions: | |
| id-token: write | |
| contents: write | |
| jobs: | |
| get-python-package-name: | |
| name: Get Python package name | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Python package name | |
| id: python-package-name | |
| run: echo "python-package-name=${{ env.PYTHON_PACKAGE_NAME }}" >> "$GITHUB_OUTPUT" | |
| outputs: | |
| python-package-name: ${{ steps.python-package-name.outputs.python-package-name }} | |
| get-next-version: | |
| name: Semantic release get next version | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: "lts/*" | |
| - name: Write package.json | |
| uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3 | |
| with: | |
| path: ./package.json | |
| write-mode: overwrite | |
| contents: | | |
| { | |
| "name": "${{ env.APP_NAME }}", | |
| "version": "1.0.0", | |
| "devDependencies": { | |
| "semantic-release-export-data": "^1.0.1", | |
| "@semantic-release/changelog": "^6.0.3" | |
| } | |
| } | |
| - name: Write .releaserc.json | |
| uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3 | |
| with: | |
| path: ./.releaserc.json | |
| write-mode: overwrite | |
| contents: | | |
| { | |
| "branches": "release", | |
| "repositoryUrl": "https://github.com/netboxlabs/diode-netbox-plugin", | |
| "debug": "true", | |
| "tagFormat": "v${version}", | |
| "plugins": [ | |
| ["semantic-release-export-data"], | |
| ["@semantic-release/commit-analyzer", { | |
| "releaseRules": [ | |
| { "message": "*", "release": "patch"}, | |
| { "message": "fix*", "release": "patch" }, | |
| { "message": "feat*", "release": "minor" }, | |
| { "message": "perf*", "release": "major" } | |
| ] | |
| }], | |
| "@semantic-release/release-notes-generator", | |
| [ | |
| "@semantic-release/changelog", | |
| { | |
| "changelogFile": "CHANGELOG.md", | |
| "changelogTitle": "# Semantic Versioning Changelog" | |
| } | |
| ], | |
| [ | |
| "@semantic-release/github", | |
| { | |
| "assets": [ | |
| { | |
| "path": "release/**" | |
| } | |
| ] | |
| } | |
| ] | |
| ] | |
| } | |
| - name: setup semantic-release | |
| run: npm i | |
| - name: release dry-run | |
| env: | |
| SLACK_WEBHOOK: ${{ secrets.SLACK_SEMANTIC_RELEASE_WEBHOOK }} | |
| run: npx semantic-release --debug --dry-run | |
| id: get-next-version | |
| - name: Set short sha output | |
| id: short-sha | |
| run: echo "::set-output name=short-sha::${GITHUB_SHA::7}" | |
| - name: Set release version | |
| id: release-version | |
| env: | |
| NEXT_RELEASE_VERSION: ${{ steps.get-next-version.outputs.new-release-version }} | |
| run: | | |
| echo "release-version=`echo $NEXT_RELEASE_VERSION | sed 's/v//g'`" >> $GITHUB_OUTPUT | |
| outputs: | |
| new-release-published: ${{ steps.get-next-version.outputs.new-release-published }} | |
| new-release-version: ${{ steps.release-version.outputs.release-version }} | |
| short-sha: ${{ steps.short-sha.outputs.short-sha }} | |
| confirm-version: | |
| name: Next version ${{ needs.get-next-version.outputs.new-release-version }} | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| needs: get-next-version | |
| if: needs.get-next-version.outputs.new-release-published == 'true' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Confirm version | |
| env: | |
| NEXT_RELEASE_VERSION: ${{ needs.get-next-version.outputs.new-release-version }} | |
| NEXT_RELEASE_SHORT_SHA: ${{ needs.get-next-version.outputs.short-sha }} | |
| run: echo "The new release version is $NEXT_RELEASE_VERSION commit $NEXT_RELEASE_SHORT_SHA" | |
| build: | |
| name: Build | |
| needs: [ get-python-package-name, get-next-version ] | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| env: | |
| BUILD_VERSION: ${{ needs.get-next-version.outputs.new-release-version }} | |
| BUILD_TRACK: release | |
| BUILD_COMMIT: ${{ needs.get-next-version.outputs.short-sha }} | |
| OUTPUT_FILENAME: ${{ needs.get-python-package-name.outputs.python-package-name }}-${{ needs.get-next-version.outputs.new-release-version }}.tar.gz | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ env.PYTHON_RUNTIME_VERSION }} | |
| - name: Insert version variables into Python | |
| run: | | |
| sed -i "s/__commit_hash__ = .*/__commit_hash__ = \"${BUILD_COMMIT}\"/" netbox_diode_plugin/version.py | |
| sed -i "s/__track__ = .*/__track__ = \"${BUILD_TRACK}\"/" netbox_diode_plugin/version.py | |
| sed -i "s/__version__ = .*/__version__ = \"${BUILD_VERSION}\"/" netbox_diode_plugin/version.py | |
| - name: Display contents of version.py | |
| run: cat netbox_diode_plugin/version.py | |
| - name: Build sdist package | |
| run: | | |
| pip install toml-cli | |
| toml set --toml-path pyproject.toml project.version ${{ env.BUILD_VERSION }} | |
| cat pyproject.toml | grep version | |
| python3 -m pip install --upgrade build | |
| python3 -m build --sdist --outdir dist/ | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.OUTPUT_FILENAME }} | |
| path: dist/${{ env.OUTPUT_FILENAME }} | |
| retention-days: 30 | |
| if-no-files-found: error | |
| - name: Publish release distributions to PyPI | |
| uses: pypa/gh-action-pypi-publish@67339c736fd9354cd4f8cb0b744f2b82a74b5c70 # v.1.12.3 | |
| with: | |
| packages-dir: dist | |
| semantic-release: | |
| name: Semantic release | |
| needs: [ build ] | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: "lts/*" | |
| - name: Write package.json | |
| uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3 | |
| with: | |
| path: ./package.json | |
| write-mode: overwrite | |
| contents: | | |
| { | |
| "name": "${{ env.APP_NAME }}", | |
| "version": "1.0.0", | |
| "devDependencies": { | |
| "semantic-release-export-data": "^1.0.1", | |
| "@semantic-release/changelog": "^6.0.3" | |
| } | |
| } | |
| - name: Write .releaserc.json | |
| uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3 | |
| with: | |
| path: ./.releaserc.json | |
| write-mode: overwrite | |
| contents: | | |
| { | |
| "branches": "release", | |
| "repositoryUrl": "https://github.com/netboxlabs/diode-netbox-plugin", | |
| "debug": "true", | |
| "tagFormat": "v${version}", | |
| "plugins": [ | |
| ["semantic-release-export-data"], | |
| ["@semantic-release/commit-analyzer", { | |
| "releaseRules": [ | |
| { "message": "*", "release": "patch"}, | |
| { "message": "fix*", "release": "patch" }, | |
| { "message": "feat*", "release": "minor" }, | |
| { "message": "perf*", "release": "major" } | |
| ] | |
| }], | |
| "@semantic-release/release-notes-generator", | |
| [ | |
| "@semantic-release/changelog", | |
| { | |
| "changelogFile": "CHANGELOG.md", | |
| "changelogTitle": "# Semantic Versioning Changelog" | |
| } | |
| ], | |
| [ | |
| "@semantic-release/github", | |
| { | |
| "assets": [ | |
| { | |
| "path": "release/**" | |
| } | |
| ] | |
| } | |
| ] | |
| ] | |
| } | |
| - name: setup semantic-release | |
| run: npm i | |
| - name: Release | |
| env: | |
| SLACK_WEBHOOK: ${{ secrets.SLACK_OBSERVABILITY_RELEASE_WEBHOOK }} | |
| run: npx semantic-release --debug |