@@ -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
|
||||||
|
}
|
||||||
@@ -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']
|
||||||
@@ -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:
|
||||||
|
- "*"
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
@@ -1,24 +1,35 @@
|
|||||||
name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
|
name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request_target:
|
||||||
types: [closed]
|
|
||||||
branches:
|
branches:
|
||||||
- develop
|
- develop
|
||||||
- main
|
types:
|
||||||
|
- closed
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*.*.*'
|
||||||
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
job:
|
test:
|
||||||
description: "Select job to run"
|
description: "Run tests"
|
||||||
required: true
|
default: true
|
||||||
type: choice
|
type: boolean
|
||||||
options:
|
publish_to_pypi:
|
||||||
- Build-and-publish-to-Test-PyPI
|
description: "Publish to PyPI"
|
||||||
- test-install
|
default: false
|
||||||
- publish-to-pypi
|
type: boolean
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Build-and-publish-to-Test-PyPI:
|
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
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -32,7 +43,7 @@ jobs:
|
|||||||
repository_name: "scraibe"
|
repository_name: "scraibe"
|
||||||
repository_url: "https://test.pypi.org/legacy/"
|
repository_url: "https://test.pypi.org/legacy/"
|
||||||
|
|
||||||
test-install:
|
Test-PyPi-install:
|
||||||
name: Test Installation from TestPyPI
|
name: Test Installation from TestPyPI
|
||||||
needs: Build-and-publish-to-Test-PyPI
|
needs: Build-and-publish-to-Test-PyPI
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -54,8 +65,18 @@ jobs:
|
|||||||
|
|
||||||
publish-to-pypi:
|
publish-to-pypi:
|
||||||
name: Publish to PyPI
|
name: Publish to PyPI
|
||||||
needs: test-install
|
needs: Test-PyPi-install
|
||||||
runs-on: ubuntu-latest
|
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:
|
steps:
|
||||||
- name: Checkout Repository Tags
|
- name: Checkout Repository Tags
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|||||||
@@ -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 }}
|
||||||
@@ -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
|
|
||||||
Reference in New Issue
Block a user