Skip to content

Commit

Permalink
feat(actions): add github action workflows (#3)
Browse files Browse the repository at this point in the history
Signed-off-by: Vincent Koppen <[email protected]>

Co-authored-by: Vincent Koppen <[email protected]>
Co-authored-by: Thijs Baaijen<[email protected]>
Co-authored-by: Jaap Schouten<[email protected]>
  • Loading branch information
Thijss and vincentkoppen authored Jan 17, 2025
1 parent 6fae7ec commit 7e5d6b8
Show file tree
Hide file tree
Showing 13 changed files with 452 additions and 4 deletions.
8 changes: 8 additions & 0 deletions .github/dco.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0

allowRemediationCommits:
individual: true
thirdParty: true

11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0


version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
171 changes: 171 additions & 0 deletions .github/workflows/build-test-and-sonar.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0


name: Build, Test, Sonar and Publish

on:
push:
branches:
- main
# run pipeline on pull request
pull_request:
# run pipeline on merge queue
merge_group:
# run pipeline from another workflow
workflow_call:
inputs:
create_release:
type: boolean
description: Create a (pre-)release when CI passes
default: false
required: false
# run this workflow manually from the Actions tab
workflow_dispatch:
inputs:
create_release:
type: boolean
description: Create a (pre-)release when CI passes
default: false
required: true

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-main
cancel-in-progress: true

jobs:

build-python:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:

- name: Checkout source code
uses: actions/checkout@v4

- name: Setup Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Build
run: |
pip install requests build
python set_pypi_version.py
python -m build --outdir wheelhouse .
- name: Save version
id: version
run: echo "version=$(cat PYPI_VERSION)" >> $GITHUB_OUTPUT

- name: Store built wheel file
uses: actions/upload-artifact@v4
with:
name: power-grid-model-ds
path: wheelhouse/

sonar-cloud:
permissions:
contents: write
runs-on: ubuntu-latest
steps:

- name: Checkout source code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis

- name: Setup Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install in develop mode
run: |
pip install -e .[dev]
- name: Test and Coverage
run: |
coverage run -m pytest
coverage xml
coverage report --fail-under=80
- name: SonarCloud Scan
if: ${{ (github.event_name == 'push') || (github.event.pull_request.head.repo.owner.login == 'PowerGridModel') }}
uses: SonarSource/sonarqube-scan-action@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

tests:
needs: build-python
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python: ["3.10", "3.11", "3.12", "3.13"]
fail-fast: false
runs-on: ${{ matrix.os }}

steps:
- name: Checkout source code
uses: actions/checkout@v4

- name: Setup Python ${{ matrix.python }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}

- name: Load built wheel file
uses: actions/download-artifact@v4
with:
name: power-grid-model-ds
path: wheelhouse/

- name: Install built wheel file
run: pip install power-grid-model-ds[dev]==${{ needs.build-python.outputs.version }} --find-links=wheelhouse

- name: Unit test and coverage
run: pytest --verbose

publish:
needs:
- build-python
- tests
- sonar-cloud
permissions:
contents: write
env:
TWINE_USERNAME: ${{ secrets.PYPI_USER }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASS }}
runs-on: ubuntu-latest
steps:
- name: Setup Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Load built wheel file
uses: actions/download-artifact@v4
with:
name: power-grid-model-ds
path: wheelhouse/

# - name: Upload wheels
# if: (github.event_name == 'push') || ((github.event_name == 'workflow_dispatch') && (github.event.inputs.create_release == 'true'))
# run: |
# pip install twine
# echo "Publish to PyPI..."
# twine upload --verbose wheelhouse/*

# - name: Release
# if: (github.event_name == 'push') || ((github.event_name == 'workflow_dispatch') && (github.event.inputs.create_release == 'true'))
# uses: softprops/action-gh-release@v2
# with:
# files: |
# ./wheelhouse/*
# tag_name: v${{ needs.build-python.outputs.version }}
# prerelease: ${{github.ref != 'refs/heads/main'}}
# generate_release_notes: true
# target_commitish: ${{ github.sha }}
46 changes: 46 additions & 0 deletions .github/workflows/check-blocking-labels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0


name: Check Blocking Labels

on:
# run pipeline on pull request
pull_request:
types:
- opened
- synchronize
- labeled
- unlabeled
# run pipeline on merge queue
merge_group:
# run this workflow manually from the Actions tab
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-blocking-labels
cancel-in-progress: true

jobs:
check-blocking-labels:
runs-on: ubuntu-latest
steps:

- name: do-not-merge
if: contains(github.event.pull_request.labels.*.name, 'do-not-merge')
run: |
echo "This pull request should not be merged (do-not-merge)"
exit 1
- name: merge-target-first
if: contains(github.event.pull_request.labels.*.name, 'merge-target-first')
run: |
echo "The target branch of this PR should be merged first (merge-target-first)"
exit 2
- name: needs-unit-tests
if: contains(github.event.pull_request.labels.*.name, 'needs-unit-tests')
run: |
echo "This pull request needs (more) unit tests before it may be merged (needs-unit-tests)"
exit 3
43 changes: 43 additions & 0 deletions .github/workflows/check-code-quality.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0


name: Check Code Quality

on:
push:
branches:
- main
# run pipeline on pull request
pull_request:
# run pipeline on merge queue
merge_group:
# run pipeline from another workflow
workflow_call:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-code-quality
cancel-in-progress: true

jobs:
check-code-quality:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11

- name: Upgrade pip
run: pip install --upgrade pip

- name: Install dependencies
run: pip install -e .[dev]

- name: Run pre-commit on all files
run: pre-commit run --all-files
22 changes: 22 additions & 0 deletions .github/workflows/dco-merge-group.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0

name: DCO for merge groups
# Workaround because DCO plugin does not run on merge group. See https://github.com/dcoapp/app/issues/199

# Controls when the workflow will run
on:
# run pipeline on merge queue because DCO plugin does not
merge_group:
# Any other signals are handled by the actual DCO plugin

jobs:
dco-merge-group:
name: DCO
runs-on: ubuntu-latest
if: ${{ github.actor != 'dependabot[bot]' }}
steps:
- name: "Workaround for DCO on merge groups"
run: |
echo "Workaround: signal DCO for merge queues because DCO plugin does not run for merge queues. See https://github.com/dcoapp/app/issues/199"
29 changes: 29 additions & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0

name: Nightly build

# Controls when the workflow will run
on:
workflow_dispatch:
schedule:
- cron: "0 2 * * *" # Based on UTC time

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-nightly
cancel-in-progress: true

jobs:
main:
uses: "./.github/workflows/build-test-and-sonar.yml"
permissions:
contents: write
with:
create_release: false

check-code-quality:
uses: "./.github/workflows/check-code-quality.yml"

reuse-compliance:
uses: "./.github/workflows/reuse-compliance.yml"
32 changes: 32 additions & 0 deletions .github/workflows/reuse-compliance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# SPDX-FileCopyrightText: Contributors to the Power Grid Model project <[email protected]>
#
# SPDX-License-Identifier: MPL-2.0


name: REUSE Compliance Check

on:
push:
branches:
- main
# run pipeline on pull request
pull_request:
# run pipeline on merge queue
merge_group:
# run pipeline from another workflow
workflow_call:
# run this workflow manually from the Actions tab
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-reuse-compliance
cancel-in-progress: true

jobs:
reuse-compliance-check:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4
- name: REUSE Compliance Check
uses: fsfe/reuse-action@v5
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.0.1
0.0
4 changes: 4 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,7 @@ unfixable = []

[tool.mypy]
disable_error_code = ["assignment", "import-untyped"]

[tool.coverage.run]
relative_files = true
branch = true
Loading

0 comments on commit 7e5d6b8

Please sign in to comment.