Skip to content

Commit

Permalink
feat: implement auto-release GHA and conventional commits.
Browse files Browse the repository at this point in the history
  • Loading branch information
drodarie committed Oct 7, 2024
1 parent dbba1aa commit 7465e15
Show file tree
Hide file tree
Showing 11 changed files with 264 additions and 14 deletions.
9 changes: 5 additions & 4 deletions .github/workflows/black.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
name: Black

on: [push, pull_request]
on: [workflow_call]

jobs:
black:
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: Black Check
uses: jpetrucciani/[email protected]
- uses: psf/black@stable
with:
options: "--check --verbose"
version: "24.1.1"
15 changes: 15 additions & 0 deletions .github/workflows/branch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: Check branch commit

on:
push:
branches:
- '**' # matches every branch ...
- '!main' # ... that is not main

jobs:
isort:
uses: ./.github/workflows/isort.yml
black:
uses: ./.github/workflows/black.yml
build:
uses: ./.github/workflows/build.yml
6 changes: 3 additions & 3 deletions .github/workflows/main.yaml → .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
name: Build and test BSB JSON

on: [push, pull_request]
on: [workflow_call]

jobs:
build:
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
runs-on: ubuntu-latest
strategy:
matrix:
Expand All @@ -27,7 +26,8 @@ jobs:
pip install --upgrade pip
# Install self, with test dependencies
pip install .[test]
- name: Run tests & coverage
run: |
coverage run -p -m unittest discover -v -s ./tests
mpiexec -n 2 coverage run -p -m unittest discover -v -s ./tests
mpiexec -n 2 coverage run -p -m unittest discover -v -s ./tests
33 changes: 33 additions & 0 deletions .github/workflows/external_pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Validate external Pull Request

on:
pull_request:
types: [opened, synchronize, reopened]

env:
LOCAL_PR: ${{ github.event.pull_request.head.repo.full_name == github.repository }}

jobs:
variables: # env variables are not accessible through job.if (https://stackoverflow.com/q/73558652)
runs-on: ubuntu-latest
outputs:
LOCAL_PR: ${{ steps.init.outputs.LOCAL_PR }}
steps:
- name: Make environment variables global
id: init
run: |
echo "LOCAL_PR=${{ env.LOCAL_PR }}" >> $GITHUB_OUTPUT
isort:
needs: variables
# if PR is external, trigger the tests on push or new PR
if: ${{ needs.variables.outputs.LOCAL_PR == 'false'}}
uses: ./.github/workflows/isort.yml
black:
needs: variables
if: ${{ needs.variables.outputs.LOCAL_PR == 'false' }}
uses: ./.github/workflows/black.yml
build:
needs: variables
if: ${{ needs.variables.outputs.LOCAL_PR == 'false' }}
uses: ./.github/workflows/build.yml
6 changes: 3 additions & 3 deletions .github/workflows/isort.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Run isort
on:
- push

on: [workflow_call]

jobs:
isort:
Expand All @@ -12,4 +12,4 @@ jobs:
python-version: 3.9
# Install dependencies for proper 1st/2nd/3rd party import sorting
- run: pip install -e .
- uses: isort/isort-action@master
- uses: isort/isort-action@master
155 changes: 155 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
name: Bump version, create release and deploy

on:
push:
branches:
- main

jobs:
isort:
uses: ./.github/workflows/isort.yml
black:
uses: ./.github/workflows/black.yml
build:
uses: ./.github/workflows/build.yml

tag_release:
needs: [isort, black, build]
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.semver.outputs.next }}
old_tag: ${{ steps.semver.outputs.current }}

steps:
- name: Create Github token
uses: actions/create-github-app-token@v1
id: app-token
with:
app-id: ${{ vars.DBBS_APP_ID }}
private-key: ${{ secrets.DBBS_APP_PRIVATE_KEY }}

- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}

- name: Get Next Version
id: semver
uses: ietf-tools/semver-action@v1
with:
token: ${{ steps.app-token.outputs.token }}
branch: main

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

- name: Bump version in Python project
run: |
pip install --upgrade pip bump-my-version
oldv="${{ steps.semver.outputs.current }}"
newv="${{steps.semver.outputs.next}}"
# Bump the version, dropping the leading `v` with `${x:1}`
bump-my-version replace --current-version=${oldv:1} --new-version=${newv:1} pyproject.toml
- name: Commit & Push version change
uses: stefanzweifel/git-auto-commit-action@v5
with:
branch: main
commit_message: 'docs: bump version: ${{ steps.semver.outputs.current }} → ${{ steps.semver.outputs.next }} [skip ci]'

- name: Create tag
uses: rickstaa/action-create-tag@v1
with:
tag: ${{ steps.semver.outputs.next }}
github_token: ${{ steps.app-token.outputs.token }}

release:
runs-on: ubuntu-latest
needs: tag_release

steps:
- name: Create Github token
uses: actions/create-github-app-token@v1
id: app-token
with:
app-id: ${{ vars.DBBS_APP_ID }}
private-key: ${{ secrets.DBBS_APP_PRIVATE_KEY }}

- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}

- name: Pull commit of version change
run: |
git pull origin main
- name: Update CHANGELOG
id: changelog
uses: requarks/changelog-action@v1
with:
token: ${{ steps.app-token.outputs.token }}
fromTag: ${{ needs.tag_release.outputs.tag }}
toTag: ${{ needs.tag_release.outputs.old_tag }}

- name: Create Release
uses: ncipollo/[email protected]
with:
allowUpdates: true
draft: false
makeLatest: true
tag: ${{ needs.tag_release.outputs.tag }}
name: ${{ needs.tag_release.outputs.tag }}
body: ${{ steps.changelog.outputs.changes }}
token: ${{ steps.app-token.outputs.token }}

- name: Commit CHANGELOG.md
uses: stefanzweifel/git-auto-commit-action@v5
with:
branch: main
commit_message: 'docs: update CHANGELOG.md for ${{ github.ref_name }} [skip ci]'
file_pattern: CHANGELOG.md

pypi-publish:
runs-on: ubuntu-latest
needs: release
environment:
name: pypi
url: https://pypi.org/p/bsb-json
permissions:
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
steps:
- name: Create Github token
uses: actions/create-github-app-token@v1
id: app-token
with:
app-id: ${{ vars.DBBS_APP_ID }}
private-key: ${{ secrets.DBBS_APP_PRIVATE_KEY }}

- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}

- name: Pull commits of version bump
run: |
git pull origin main
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: 3.11

- name: Install dependencies and build dist
run: |
python -m pip install --upgrade pip
pip install build
python -m build
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
16 changes: 16 additions & 0 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Validate Pull Request Name

on:
pull_request:
types: [edited, opened, reopened]

jobs:
validate-pr-title:
# Trigger only for local PR when PR is edited (title, description, etc.)
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
runs-on: ubuntu-latest
steps:
- name: PR Conventional Commit Validation
uses: ytanikin/[email protected]
with:
task_types: '["feat","fix","docs","test","ci","refactor","perf","revert"]'
14 changes: 12 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
default_install_hook_types:
- pre-commit
- commit-msg
repos:
- repo: https://github.com/psf/black-pre-commit-mirror
rev: 23.11.0
rev: 24.1.1
hooks:
- id: black
- repo: https://github.com/pycqa/isort
rev: 5.12.0
hooks:
- id: isort
name: isort (python)
name: isort (python)
- repo: https://github.com/compilerla/conventional-pre-commit
rev: v3.3.0
hooks:
- id: conventional-pre-commit
name: conventional-commit
stages: [ commit-msg ]
args: [ ]
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## [v4.1.0] - 2024-05-21
### What's Changed
* Implement ReferenceParser from JSONParser code abstraction. by @drodarie in https://github.com/dbbs-lab/bsb-json/pull/4

### New Contributors
* @drodarie made their first contribution in https://github.com/dbbs-lab/bsb-json/pull/4

**Full Changelog**: https://github.com/dbbs-lab/bsb-json/commits/v4.1.0

[v4.1.0]: https://github.com/dbbs-lab/bsb-json/compare/v4.0.0...v4.1.0
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,8 @@
[![Build Status](https://github.com/dbbs-lab/bsb-json/actions/workflows/main.yml/badge.svg)](https://github.com/dbbs-lab/bsb-json/actions/workflows/main.yml)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

# bsb-json

`bsb-json` is a plugin of [BSB](https://github.com/dbbs-lab/bsb) (see also
[bsb-core](https://github.com/dbbs-lab/bsb-core)).
It allows the user to write their models' configuration in the json format.
7 changes: 5 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,13 @@ name = "bsb_json"
[project.optional-dependencies]
test = ["bsb-core[parallel]", "bsb-test~=4.0", "coverage~=7.0"]
dev = [
"bsb-json[test]",
"build~=1.0",
"twine~=4.0",
"pre-commit~=3.5",
"black~=24.0",
"black~=24.1.1",
"isort~=5.12",
"bump-my-version~=0.18"
"bump-my-version~=0.24"
]

[tool.isort]
Expand Down

0 comments on commit 7465e15

Please sign in to comment.