From 2d235f885dfa5e93884ba6247ce7efa13c224d91 Mon Sep 17 00:00:00 2001 From: Arnav Sacheti <36746504+arnavsacheti@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:44:00 -0700 Subject: [PATCH] splti github actions up --- .github/workflows/build.yml | 202 ++++++-------------------------- .github/workflows/docs.yml | 56 +++++++++ .github/workflows/format.yml | 23 ++++ .github/workflows/lint.yml | 23 ++++ .github/workflows/release.yml | 46 ++++++++ .github/workflows/test.yml | 40 +++++++ .github/workflows/typecheck.yml | 26 ++++ 7 files changed, 253 insertions(+), 163 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/format.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/test.yml create mode 100644 .github/workflows/typecheck.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ffc23fe..962142b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,175 +1,51 @@ -name: build +name: Build on: push: - branches: - - main - - 'dev/**' + branches: [ main ] pull_request: branches: [ main ] - release: - types: - - published - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: + workflow_call: jobs: - test: - strategy: - matrix: - python-version: - - "3.10" - - "3.11" - - "3.12" - - "3.13" - - "3.14" - include: - - os: ubuntu-latest - - runs-on: ${{ matrix.os }} - - steps: - - name: Checkout - uses: actions/checkout@v5 - - - name: Setup UV - uses: astral-sh/setup-uv@v6 - with: - enable-cache: true - python-version: ${{ inputs.python-version }} - install-uv: true - - - name: Test - run: | - uv sync --all-extras --group test - cd tests - uvx pytest --cov=peakrdl_busdecoder --synth-tool skip --sim-tool stub - - - name: Coveralls - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COVERALLS_PARALLEL: true - run: | - cd tests - uvx coveralls --service=github - - finish_coveralls: - needs: test - runs-on: ubuntu-latest - steps: - - name: Setup UV - uses: astral-sh/setup-uv@v6 - with: - enable-cache: true - python-version: "3.10" - install-uv: true - - - name: Coveralls - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COVERALLS_PARALLEL: true - run: | - python -m pip install coveralls>=3.0.0 - uvx coveralls --service=github --finish - -#------------------------------------------------------------------------------- - format: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v5 - - - name: Setup UV - uses: astral-sh/setup-uv@v6 - with: - enable-cache: true - python-version: "3.10" - install-uv: true - - - name: Ruff format (check only) - run: uvx ruff format --check . - -#------------------------------------------------------------------------------- - lint: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v5 - - - name: Setup UV - uses: astral-sh/setup-uv@v6 - with: - enable-cache: true - python-version: "3.10" - install-uv: true - - - name: Ruff lint - run: uvx ruff check --output-format=github . - -#------------------------------------------------------------------------------- - typecheck: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v5 - - - name: Setup UV - uses: astral-sh/setup-uv@v6 - with: - enable-cache: true - python-version: "3.10" - install-uv: true - - - name: Pyrefly type check - run: uvx pyrefly check --summarize-errors - -#------------------------------------------------------------------------------- build: - needs: - - test - - format - - lint - - typecheck - name: Build distributions runs-on: ubuntu-latest + needs: [lint, typecheck, format, test] + permissions: + contents: read + steps: - - name: Checkout - uses: actions/checkout@v5 - - - name: Setup UV - uses: astral-sh/setup-uv@v6 + - uses: actions/checkout@v4 + + - name: Set up uv + uses: astral-sh/setup-uv@v3 + + - name: Build package + run: uvx --from build pyproject-build --installer uv + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 with: - enable-cache: true - python-version: "3.10" - install-uv: true - - - name: Build Package - run: uv build - - - uses: actions/upload-artifact@v4 - with: - name: dist - path: | - dist/*.tar.gz - dist/*.whl - -#------------------------------------------------------------------------------- - # deploy: - # needs: - # - build - - # runs-on: ubuntu-latest - # environment: release - # permissions: - # id-token: write - - # # Only publish when a GitHub Release is created. - # if: github.event_name == 'release' - # steps: - # - uses: actions/download-artifact@v4 - # with: - # name: dist - # path: dist - - # - uses: pypa/gh-action-pypi-publish@release/v1 + name: dist-packages + path: dist/ + + lint: + uses: ./.github/workflows/lint.yml + permissions: + contents: read + + typecheck: + uses: ./.github/workflows/typecheck.yml + permissions: + contents: read + + format: + uses: ./.github/workflows/format.yml + permissions: + contents: read + + test: + uses: ./.github/workflows/test.yml + permissions: + contents: read diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..98366a9 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,56 @@ +name: Documentation + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +jobs: + build-docs: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + + - name: Set up uv + uses: astral-sh/setup-uv@v3 + with: + python-version: '3.12' + + - name: Install dependencies + run: | + uv sync --group docs + + - name: Build documentation + run: | + uv run make html -C docs + + - name: Upload documentation artifacts + uses: actions/upload-artifact@v4 + with: + name: documentation + path: docs/_build/html/ + + - name: Upload static files as artifact + id: deployment + uses: actions/upload-pages-artifact@v3 + with: + path: docs/_build/html/ + + deploy-docs: + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build-docs + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000..3308a1b --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,23 @@ +name: Format Check + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + workflow_call: + +jobs: + format: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + + - name: Set up uv + uses: astral-sh/setup-uv@v3 + + - name: Run ruff format check + run: uvx ruff format --check . diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..14e59fb --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,23 @@ +name: Lint + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + workflow_call: + +jobs: + lint: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + + - name: Set up uv + uses: astral-sh/setup-uv@v3 + + - name: Run ruff check + run: uvx ruff check . diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..0d6fd9d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,46 @@ +name: Release + +on: + push: + tags: + - 'v*' + workflow_dispatch: + +jobs: + build: + uses: ./.github/workflows/build.yml + permissions: + contents: read + + release: + runs-on: ubuntu-latest + needs: build + permissions: + contents: write + id-token: write + + steps: + - uses: actions/checkout@v4 + + - name: Set up uv + uses: astral-sh/setup-uv@v3 + + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: dist-packages + path: dist/ + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + if: startsWith(github.ref, 'refs/tags/') + with: + files: dist/* + generate_release_notes: true + + - name: Publish to PyPI + if: startsWith(github.ref, 'refs/tags/') + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} + run: uvx twine upload dist/* diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..18683d2 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,40 @@ +name: Test + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + workflow_call: + +jobs: + test: + runs-on: ubuntu-latest + permissions: + contents: read + strategy: + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] + + steps: + - uses: actions/checkout@v4 + + - name: Set up uv + uses: astral-sh/setup-uv@v3 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + uv sync --group test + + - name: Run tests + run: uv run pytest tests/ -v --cov=peakrdl_busdecoder --cov-report=xml --cov-report=term + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + if: matrix.python-version == '3.12' + with: + file: ./coverage.xml + fail_ci_if_error: false diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml new file mode 100644 index 0000000..78a9e3a --- /dev/null +++ b/.github/workflows/typecheck.yml @@ -0,0 +1,26 @@ +name: Type Check + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + workflow_call: + +jobs: + typecheck: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + + - name: Set up uv + uses: astral-sh/setup-uv@v3 + + - name: Install package + run: uv sync --extra cli + + - name: Run pyrefly type check + run: uvx pyrefly check src/