Skip to content

Refactor workflow infrastructure using the copier template #1

Refactor workflow infrastructure using the copier template

Refactor workflow infrastructure using the copier template #1

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