Refactor workflow infrastructure using the copier template #1
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: water-tuner test suite | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| - dev* | |
| - release* | |
| release: | |
| types: [published] | |
| jobs: | |
| # ╔──────────────────────────╗ | |
| # │ _____ _ │ | |
| # │ |_ _|__ ___| |_ ___ │ | |
| # │ | |/ _ \/ __| __/ __| │ | |
| # │ | | __/\__ \ |_\__ \ │ | |
| # │ |_|\___||___/\__|___/ │ | |
| # │ │ | |
| # ╚──────────────────────────╝ | |
| tests: | |
| runs-on: windows-latest | |
| name: water-tuner unit tests | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: astral-sh/setup-uv@v6 | |
| with: | |
| enable-cache: true | |
| - name: Install python dependencies | |
| run: uv sync | |
| - name: Run ruff format | |
| run: uv run ruff format | |
| - name: Run ruff check | |
| run: uv run ruff check | |
| - name: Run codespell | |
| run: uv run codespell | |
| - name: Setup .NET Core SDK | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: 8.x | |
| - name: Restore dotnet tools | |
| run: dotnet tool restore | |
| - name: Setup Bonsai environment | |
| working-directory: ./bonsai | |
| run: ./setup.ps1 | |
| - name: Run python unit tests | |
| run: uv run python -m unittest | |
| - name: Regenerate schemas | |
| run: uv run water-tuner regenerate | |
| - name: Check for uncommitted changes | |
| run: | | |
| git config --global core.safecrlf false | |
| git diff --exit-code || (echo "Untracked changes found" && exit 1) | |
| # ╔───────────────────────────────────────────────────────────╗ | |
| # │ ____ ___ ____ ____ ____ _ │ | |
| # │ / ___|_ _/ ___| _ \ | _ \ ___| | ___ __ _ ___ ___ │ | |
| # │ | | | | | | | | | | |_) / _ \ |/ _ \/ _` / __|/ _ \ │ | |
| # │ | |___ | | |___| |_| | | _ < __/ | __/ (_| \__ \ __/ │ | |
| # │ \____|___\____|____/ |_| \_\___|_|\___|\__,_|___/\___| │ | |
| # │ │ | |
| # ╚───────────────────────────────────────────────────────────╝ | |
| github-rc-release: | |
| needs: tests | |
| runs-on: ubuntu-latest | |
| if: > | |
| github.ref == 'refs/heads/main' && | |
| github.event_name == 'push' && | |
| github.event.head_commit.author.email != 'github-actions[bot]@users.noreply.github.com' | |
| name: Create GitHub pre-release | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| ref: main | |
| - uses: astral-sh/setup-uv@v6 | |
| with: | |
| enable-cache: true | |
| - name: Bump pre-release by default | |
| run: uv version --bump rc | |
| - name: Regenerate schemas | |
| run: uv run water-tuner regenerate | |
| - name: Commit version and schema changes | |
| run: | | |
| git config --global user.name "github-actions[bot]" | |
| git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
| git add . | |
| git commit -m "Bump version and regenerate schemas [skip ci]" || echo "No changes to commit" | |
| git push origin main | |
| - name: Get version | |
| id: get_version | |
| run: | | |
| version=$(uv version --output-format json | jq -r '.version') | |
| echo "version=$version" >> $GITHUB_OUTPUT | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: v${{ steps.get_version.outputs.version }} | |
| name: v${{ steps.get_version.outputs.version }} | |
| generate_release_notes: true | |
| prerelease: true | |
| body: | | |
| Automated pre-release v${{ steps.get_version.outputs.version }} | |
| # ╔─────────────────────────────────────────────────────────────────╗ | |
| # │ ____ _ _ _ ____ _ │ | |
| # │ | _ \ _ _| |__ | (_) ___ | _ \ ___| | ___ __ _ ___ ___ │ | |
| # │ | |_) | | | | '_ \| | |/ __| | |_) / _ \ |/ _ \/ _` / __|/ _ \ │ | |
| # │ | __/| |_| | |_) | | | (__ | _ < __/ | __/ (_| \__ \ __/ │ | |
| # │ |_| \__,_|_.__/|_|_|\___| |_| \_\___|_|\___|\__,_|___/\___| │ | |
| # │ │ | |
| # ╚─────────────────────────────────────────────────────────────────╝ | |
| github-public-release: | |
| runs-on: ubuntu-latest | |
| name: Create GitHub public release | |
| needs: tests | |
| if: github.event_name == 'release' && | |
| github.event.action == 'published' && | |
| !github.event.release.prerelease | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| ref: main | |
| - uses: astral-sh/setup-uv@v6 | |
| with: | |
| enable-cache: true | |
| - name: Get release version from tag | |
| id: get_version | |
| run: echo "version=${{ github.event.release.tag_name }}" >> $GITHUB_OUTPUT | |
| - name: Validate version tag format | |
| run: uv version ${{ steps.get_version.outputs.version }} --dry-run | |
| - name: Update package version | |
| run: uv version ${{ steps.get_version.outputs.version }} | |
| - name: Regenerate schemas | |
| run: uv run water-tuner regenerate | |
| - name: Commit version and schema changes | |
| run: | | |
| git config --global user.name "github-actions[bot]" | |
| git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
| git add . | |
| git commit -m "Set version and regenerate schemas" || echo "No changes to commit" | |
| git push origin main | |
| # ╔─────────────────────────╗ | |
| # │ ____ │ | |
| # │ | _ \ ___ ___ ___ │ | |
| # │ | | | |/ _ \ / __/ __| │ | |
| # │ | |_| | (_) | (__\__ \ │ | |
| # │ |____/ \___/ \___|___/ │ | |
| # │ │ | |
| # ╚─────────────────────────╝ | |
| build-docs: | |
| name: Build and deploy documentation to GitHub Pages | |
| runs-on: ubuntu-latest | |
| needs: github-rc-release | |
| if: github.ref == 'refs/heads/main' && github.event_name == 'push' | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v5 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v3 | |
| - name: Setup Graphviz | |
| uses: ts-graphviz/setup-graphviz@v2 | |
| - name: Install docs group of dependencies | |
| run: uv sync --group docs | |
| - name: Build Sphinx documentation | |
| run: uv run sphinx-build -b html docs/ _build/html | |
| - name: Deploy to GitHub Pages | |
| uses: peaceiris/actions-gh-pages@v4 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| publish_dir: _build/html | |
| force_orphan: true |