Merge pull request #109 from JSchmie/workflow

Added new Workflows
This commit is contained in:
Jacob Schmieder
2024-08-30 15:34:29 +02:00
committed by GitHub
9 changed files with 276 additions and 153 deletions
+21
View File
@@ -0,0 +1,21 @@
{
labelsSynonyms: {
bug: ['error', 'need fix', 'not working', 'failure', 'crash', 'problem', 'issue', 'defect', 'glitch', 'fault', 'anomaly'],
enhancement: ['upgrade', 'update', 'improve', 'feature request', 'new feature', 'enhance', 'extension', 'add-on', 'improvement'],
"help wanted": ['help', 'how can i', 'assistance needed', 'support needed', 'question', 'guidance', 'aid', 'need assistance', 'advice', 'instruction'],
documentation: ['docs', 'Readme', 'documentation', 'guide', 'manual', 'instructions', 'how-to', 'reference', 'tutorial', 'specification'],
docker: ['compose', 'Dockerfile', 'container', 'docker-compose', 'image', 'docker setup', 'kubernetes', 'docker swarm', 'containerization'],
performance: ['slow', 'lag', 'performance', 'speed', 'optimization', 'tuning', 'efficiency', 'latency', 'improve performance', 'boost', 'performance issue'],
security: ['vulnerability', 'exploit', 'attack', 'breach', 'security', 'protection', 'patch', 'secure', 'threat', 'risk', 'malware'],
ui: ['user interface', 'ui', 'ux', 'design', 'layout', 'front-end', 'visual', 'interface', 'experience', 'aesthetic', 'theme', 'style'],
test: ['test', 'testing', 'unit test', 'integration test', 'e2e test', 'automated test', 'test case', 'test suite', 'qa', 'quality assurance'],
compatibility: ['compatible', 'incompatible', 'version', 'compatibility', 'interop', 'support', 'versioning', 'cross-platform', 'integration', 'compatibility issue']
},
labelsNotAllowed: [
'duplicate',
'good first issue',
'invalid'
],
//defaultLabels: ['triage'],
ignoreComments: true
}
+62
View File
@@ -0,0 +1,62 @@
# .github/labeler.yml
# Label for documentation changes
documentation:
- changed-files:
- any-glob-to-any-file:
- 'docs/**'
- 'README.md'
- 'CHANGELOG.md'
- 'CONTRIBUTING.md'
- 'Makefile'
- 'Pictures'
# Label for Docker changes
docker:
- changed-files:
- any-glob-to-any-file:
- '*docker*'
- 'Docker*'
# Label for release-related changes
release:
- changed-files:
- any-glob-to-any-file:
- 'scraibe/**'
- 'pyproject.toml'
- 'LICENCE'
tests:
- changed-files:
- any-glob-to-any-file:
- 'test/**'
workflows:
- changed-files:
- any-glob-to-any-file:
- '.github/workflows/*'
- '.github/*'
github:
- changed-files:
- any-glob-to-any-file:
- '.gitignore'
dependencies:
- changed-files:
- any-glob-to-any-file:
- 'requirements.txt'
- 'environment.yml'
- 'pyproject.toml'
- head-branch: ['^dependencies', 'dependencies', '^dependency', 'dependency']
feature:
- head-branch: ['^feature', 'feature']
patch:
- head-branch: ['^patch', 'patch', '^bug', 'bug']
ignore-pr-title-for-release:
- head-branch: ['develop']
- base-branch: ['main']
+47
View File
@@ -0,0 +1,47 @@
#Automatically generated release notes from GIthub used by softprops/action-gh-release@v2 in .github/workflows/release.yaml
changelog:
exclude:
labels:
- ignore-for-release
- ignore-pr-title-for-release
- workflows
- github
- documentation
authors:
- octocat
- github-actions[bot]
categories:
- title: New Features 🎉
labels:
- enhancement
- feature
- Semver-Minor
- title: Bug Fixes 🐛
labels:
- bug
- fix
- patch
- title: Dependency Updates 📦
labels:
- dependency
- dependencies
- dependency-update
- title: Breaking Changes 🛠
labels:
- breaking-change
- Semver-Major
- title: Container and Compose Updates 🐳
labels:
- docker
- compose
- docker-compose
- title: Other Changes 🔧
labels:
- "*"
+18
View File
@@ -0,0 +1,18 @@
name: Labeling new issue
on:
issues:
types: ['opened', 'reopened']
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: |
.github/auto-label.json5
sparse-checkout-cone-mode: false
- uses: Renato66/auto-label@v3
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
configuration-file: .github/auto-label.json5
+22
View File
@@ -0,0 +1,22 @@
name: Auto Label PRs
on:
pull_request:
types: [opened, synchronize, reopened, edited]
jobs:
label:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
outputs:
all-labels: ${{ steps.label-the-PR.outputs.all-labels }}
steps:
- name: Apply Labels
id: label-the-PR
uses: actions/labeler@v5
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
configuration-path: .github/auto_label_pr.yml
sync-labels: true
-29
View File
@@ -1,29 +0,0 @@
name: Manual Publish to PyPI
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch to check out (main or develop)'
required: true
type: choice
options:
- main
- develop
jobs:
publish-to-pypi:
name: Publish to PyPI
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: '0'
ref: ${{ github.event.inputs.branch }}
- name: Set up Poetry 📦
uses: JRubics/poetry-publish@v1.16
with:
pypi_token: ${{ secrets.PYPI_API_TOKEN }}
plugins: "poetry-dynamic-versioning"
repository_name: "scraibe"
+34 -13
View File
@@ -1,24 +1,35 @@
name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
on:
pull_request:
types: [closed]
pull_request_target:
branches:
- develop
- main
types:
- closed
push:
tags:
- 'v*.*.*'
workflow_dispatch:
inputs:
job:
description: "Select job to run"
required: true
type: choice
options:
- Build-and-publish-to-Test-PyPI
- test-install
- publish-to-pypi
test:
description: "Run tests"
default: true
type: boolean
publish_to_pypi:
description: "Publish to PyPI"
default: false
type: boolean
jobs:
Build-and-publish-to-Test-PyPI:
if: |
(github.event_name == 'workflow_dispatch' &&
github.event.inputs.test == 'true') ||
(github.event_name == 'pull_request_target' &&
github.event.pull_request.merged &&
contains(github.event.pull_request.labels.*.name, 'release')) ||
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/'))
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
@@ -32,7 +43,7 @@ jobs:
repository_name: "scraibe"
repository_url: "https://test.pypi.org/legacy/"
test-install:
Test-PyPi-install:
name: Test Installation from TestPyPI
needs: Build-and-publish-to-Test-PyPI
runs-on: ubuntu-latest
@@ -54,8 +65,18 @@ jobs:
publish-to-pypi:
name: Publish to PyPI
needs: test-install
needs: Test-PyPi-install
runs-on: ubuntu-latest
if: |
always() &&
(( needs.Build-and-publish-to-Test-PyPI.result != 'failure' &&
needs.Test-PyPi-install.result != 'failure' ) &&
((github.event_name == 'workflow_dispatch' &&
github.event.inputs.publish_to_pypi == 'true') ||
(github.event_name == 'pull_request_target' &&
github.event.pull_request.merged &&
contains(github.event.pull_request.labels.*.name, 'release')) ||
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/'))))
steps:
- name: Checkout Repository Tags
uses: actions/checkout@v4
+72
View File
@@ -0,0 +1,72 @@
name: release
on:
push:
tags:
- 'v*.*.*'
jobs:
build-on-workflow:
runs-on: ubuntu-latest
if: |
github.event_name == 'workflow_run' &&
github.event.workflow_run.conclusion == 'success'
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # Ensure all history is fetched
ref: main
- name: Get Latest Tag
id: get-latest-tag
if:
run: |
git fetch --tags
latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`)
echo "latest_tag=$latest_tag" >> $GITHUB_OUTPUT
- name: Release from Workflow Run
if: |
github.event_name == 'workflow_run' &&
github.event.workflow_run.conclusion == 'success'
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
append_body: true
tag_name: ${{ steps.get-latest-tag.outputs.latest_tag }}
build-on-tag:
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # Ensure all history is fetched
ref: main
- name: Release from Tag Push
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
append_body: true
write_changelog:
runs-on: ubuntu-latest
needs: [build-on-workflow, build-on-tag]
if: |
always() &&
(needs.build-on-workflow.result == 'success' || needs.build-on-tag.result == 'success' )
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # Ensure all history is fetched
ref: main
- name: Write CHANGELOG.md
uses: rhysd/changelog-from-release/action@v3
with:
file: CHANGELOG.md
github_token: ${{ secrets.GITHUB_TOKEN }}
-111
View File
@@ -1,111 +0,0 @@
name: Semantic Versioning for Tags
on:
pull_request:
types: [closed]
branches:
- main
jobs:
bump-version:
if: ${{ github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' }}
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check if Source Branch is docs
id: check_docs_branch
run: |
pr_head_ref="${{ github.event.pull_request.head.ref }}"
if [[ "$pr_head_ref" == "docs" ]]; then
echo "is_docs_branch=true" >> $GITHUB_ENV
echo "This is a docs branch merge. Exiting without creating a tag."
exit 0
else
echo "is_docs_branch=false" >> $GITHUB_ENV
fi
- name: Bump Version and Tag
if: env.is_docs_branch != 'true'
id: bump_version
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
# Fetch the latest tags from the remote
git fetch --tags
# Get the latest tag, or initialize to v0.0.0 if no tags are found
latest_tag=$(git describe --tags `git rev-list --tags --max-count=1` 2>/dev/null || echo "v0.0.0")
# Extract version from PR title or body
pr_body="${{ github.event.pull_request.body }}"
pr_title="${{ github.event.pull_request.title }}"
version_regex="v([0-9]+)\.([0-9]+)\.([0-9]+)"
if [[ $pr_body =~ $version_regex ]]; then
major=${BASH_REMATCH[1]}
minor=${BASH_REMATCH[2]}
patch=${BASH_REMATCH[3]}
new_tag="v$major.$minor.$patch"
elif [[ $pr_title =~ $version_regex ]]; then
major=${BASH_REMATCH[1]}
minor=${BASH_REMATCH[2]}
patch=${BASH_REMATCH[3]}
new_tag="v$major.$minor.$patch"
else
# Split the latest tag into parts
IFS='.' read -r -a parts <<< "${latest_tag#v}"
major=${parts[0]}
minor=${parts[1]}
patch=${parts[2]}
patch=$((patch + 1))
new_tag="v$major.$minor.$patch"
fi
echo "Bumping version from $latest_tag to $new_tag"
# Set the new tag as an environment variable
echo "new_tag=$new_tag" >> $GITHUB_ENV
# Tag the new version
git tag $new_tag
# Configure GitHub token authentication
git remote set-url origin https://x-access-token:${{ secrets.GH_TOKEN }}@github.com/${{ github.repository }}.git
# Push the new tag to the remote repository
git push origin $new_tag
- name: Extract Release Notes
if: env.is_docs_branch != 'true'
id: extract_notes
run: |
version="${{ env.new_tag }}"
clean_version="${version#v}"
release_notes=$(awk -v version="$clean_version" '
BEGIN { flag=0 }
# Start flagging when the version section is found
/^## \[.*\]/ {
if (flag) exit # Exit when the next section starts
}
/^## \['"$clean_version"'\]/ { flag=1; next } # Start printing after the header
flag { print } # Print lines while flag is 1
' CHANGELOG.md)
echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV
echo "$release_notes" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Create Release
if: env.is_docs_branch != 'true'
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
with:
tag_name: ${{ env.new_tag }}
release_name: Release ${{ env.new_tag }}
body: ${{ env.RELEASE_NOTES }}
draft: false
prerelease: false