From 92cd040dad8ba91a22515f3845f8dbb5f6a6939c Mon Sep 17 00:00:00 2001 From: Simone Pulcini Date: Thu, 25 Apr 2024 12:03:28 +0200 Subject: [PATCH] ci: add ci workflow to manage lib release with semantic-release Signed-off-by: Simone Pulcini --- .github/workflows/release.yml | 84 +++++++++++++++++++++++++++++++++++ .releaserc.yml | 56 +++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 .github/workflows/release.yml create mode 100644 .releaserc.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..33508a7b --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,84 @@ +name: Release +on: + push: + branches: + - main + - pre/* + pull_request: + types: [closed] + +permissions: + contents: write # for checkout + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Install git + run: | + sudo apt update + sudo apt install -y git + - name: Install Python Env and Poetry + uses: actions/setup-python@v5 + with: + python-version: '3.9.19' + - run: pip install poetry + - name: Install Node Env + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Checkout + uses: actions/checkout@v4.1.1 + with: + fetch-depth: 0 + persist-credentials: false + - name: Build app + run: | + poetry install + poetry build + id: build_cache + if: success() + - name: Cache build + uses: actions/cache@v2 + with: + path: ./dist + key: ${{ runner.os }}-build-${{ hashFiles('dist/**') }} + if: steps.build_cache.outputs.id != '' + + release: + name: Release + runs-on: ubuntu-latest + needs: build + environment: development + if: | + github.event_name == 'push' && github.ref == 'refs/heads/main' || + github.event_name == 'push' && github.ref == 'refs/heads/pre/beta' || + github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged && github.event.pull_request.base.ref == 'main' || + github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged && github.event.pull_request.base.ref == 'pre/beta' + permissions: + contents: write + issues: write + pull-requests: write + id-token: write + steps: + - name: Checkout repo + uses: actions/checkout@v4.1.1 + with: + fetch-depth: 0 + persist-credentials: false + - name: Semantic Release + uses: cycjimmy/semantic-release-action@v4.1.0 + with: + semantic_version: 23 + extra_plugins: | + semantic-release-pypi + @semantic-release/git + @semantic-release/commit-analyzer + @semantic-release/release-notes-generator + @semantic-release/github + @semantic-release/changelog + conventional-changelog-conventionalcommits + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} diff --git a/.releaserc.yml b/.releaserc.yml new file mode 100644 index 00000000..65d589fa --- /dev/null +++ b/.releaserc.yml @@ -0,0 +1,56 @@ +plugins: + - - "@semantic-release/commit-analyzer" + - preset: conventionalcommits + - - "@semantic-release/release-notes-generator" + - writerOpts: + commitsSort: + - subject + - scope + preset: conventionalcommits + presetConfig: + types: + - type: feat + section: Features + - type: fix + section: Bug Fixes + - type: chore + section: chore + - type: docs + section: Docs + - type: style + hidden: true + - type: refactor + section: Refactor + - type: perf + section: Perf + - type: test + section: Test + - type: build + section: Build + - type: ci + section: CI + - "@semantic-release/changelog" + - "semantic-release-pypi" + - "@semantic-release/github" + - - "@semantic-release/git" + - assets: + - CHANGELOG.md + - pyproject.toml + message: |- + ci(release): ${nextRelease.version} [skip ci] + + ${nextRelease.notes} +branches: + #child branches coming from tagged version for bugfix (1.1.x) or new features (1.x) + #maintenance branch + - name: "+([0-9])?(.{+([0-9]),x}).x" + channel: "stable" + #release a production version when merging towards main + - name: "main" + channel: "stable" + #prerelease branch + - name: "pre/beta" + channel: "dev" + prerelease: "beta" +debug: true +