Skip to content

[v1.1.6] Release

[v1.1.6] Release #21

name: "CI/CD Pipeline (PR: to master)"
on:
pull_request:
branches:
- master
permissions:
contents: write
actions: read
jobs:
check-commit:
runs-on: ubuntu-latest
outputs:
commit-message: ${{ steps.check.outputs.commit-message }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Get latest commit message
id: check
run: |
COMMIT_MESSAGE=$(git log -1 --pretty=format:'%s')
echo "commit-message=$COMMIT_MESSAGE" >> $GITHUB_OUTPUT
merge-from-docs:
runs-on: ubuntu-latest
needs: [check-commit]
# [`master` PR] "Merge pull request*/docs"
# [`master` PR] "Merge pull request*[Docs] Build by Sphinx for GitHub Pages"
steps:
- name: Check commit message and set status
run: |
COMMIT_MESSAGE="${{ needs.check-commit.outputs.commit-message }}"
if [[ "$COMMIT_MESSAGE" == Merge\ pull\ request* && ( "$COMMIT_MESSAGE" == *docs* || "$COMMIT_MESSAGE" == *'[Docs] Build by Sphinx for GitHub Pages'* ) ]]; then
echo "Commit message meets the criteria."
else
echo "Commit message does not meet the criteria."
exit 1
fi
- name: Slack webhook
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: zerohertzLib
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
if_mention: failure,cancelled
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_CHECK }}
if: always()
build:
runs-on: ubuntu-latest
needs: [check-commit]
# [`master` PR] (Except "Merge pull request*/docs" && "Merge pull request*[Docs] Build by Sphinx for GitHub Pages")
if: |
!(startsWith(needs.check-commit.outputs.commit-message, 'Merge pull request') &&
(contains(needs.check-commit.outputs.commit-message, 'docs') ||
contains(needs.check-commit.outputs.commit-message, '[Docs] Build by Sphinx for GitHub Pages')))
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Cache virtualenv
uses: actions/cache@v4
with:
path: venv
key: ${{ runner.os }}-python-venv
restore-keys: |
${{ runner.os }}-python-venv-
- name: Install dependencies
run: |
python -m venv venv
source venv/bin/activate
pip install .'[all]'
- name: Slack webhook
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: zerohertzLib
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
if_mention: failure,cancelled
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_CHECK }}
if: always()
lint:
runs-on: ubuntu-latest
needs: [build]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Cache virtualenv
uses: actions/cache@v4
with:
path: venv
key: ${{ runner.os }}-python-venv
restore-keys: |
${{ runner.os }}-python-venv-
- name: Lint code
run: |
source venv/bin/activate
pip install -r requirements/requirements-style.txt
black --check .
flake8 zerohertzLib
pylint -r n zerohertzLib
- name: Slack webhook
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: zerohertzLib
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
if_mention: failure,cancelled
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_CHECK }}
if: always()
test:
runs-on: ubuntu-latest
needs: [build]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Cache virtualenv
uses: actions/cache@v4
with:
path: venv
key: ${{ runner.os }}-python-venv
restore-keys: |
${{ runner.os }}-python-venv-
- name: Run tests
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
run: |
source venv/bin/activate
sudo apt update
sudo apt install python3-opencv -y
pip install pytest pytest-cov
pytest --cov --cov-report=xml --junitxml=junit.xml -o junit_family=legacy
- name: Upload test results to Codecov
uses: codecov/test-results-action@v1
with:
flags: python3.11
token: ${{ secrets.CODECOV_TOKEN }}
if: always()
- name: Upload results to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
if: always()
- name: Slack webhook
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: zerohertzLib
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
if_mention: failure,cancelled
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_CHECK }}
if: always()
docs:
runs-on: ubuntu-latest
needs: [lint, test]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Cache virtualenv
uses: actions/cache@v4
with:
path: venv
key: ${{ runner.os }}-python-venv
restore-keys: |
${{ runner.os }}-python-venv-
- name: Align with latest branch
run: |
git fetch origin
git checkout ${{ github.head_ref }}
git reset --hard origin/${{ github.head_ref }}
- name: Update version
if: startsWith(github.head_ref, 'dev-')
run: |
HEAD_REF=${{ github.head_ref }}
VERSION=${HEAD_REF#dev-}
sed -i "s/^__version__ = .*/__version__ = \"$VERSION\"/" zerohertzLib/__init__.py
- name: Build docs
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
source venv/bin/activate
sudo apt update
sudo apt install build-essential -y
pip install -r requirements/requirements-docs.txt
python sphinx/release_note.py --token ${GH_TOKEN}
python sphinx/example_images.py
cd sphinx && make html
cd ..
rm -rf docs
mv sphinx/build/html docs
touch docs/.nojekyll
- name: Commit and push on docs branch
env:
GH_USERNAME: ${{ secrets.GH_USERNAME }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
git config --global user.email "[email protected]"
git config --global user.name "${GH_USERNAME}"
git config --global credential.helper "!f() { echo username=${GH_USERNAME}; echo password=${GH_TOKEN}; }; f"
if git ls-remote --heads origin docs | grep 'refs/heads/docs'; then git push origin --delete docs; fi
git checkout -b docs
if git diff --exit-code zerohertzLib/__init__.py > /dev/null; then
echo "No changes in version, skipping commit."
else
git add zerohertzLib/__init__.py
git commit -m ":hammer: Update: Version (#${{ github.event.pull_request.number }})"
fi
git add docs
git add sphinx/source
git commit -m ':memo: Docs: Build Sphinx (#${{ github.event.pull_request.number }})'
git push origin docs
echo '{
"title": "[Docs] Build by Sphinx for GitHub Pages",
"head": "docs",
"base": "${{ github.head_ref }}",
"body": "#${{ github.event.pull_request.number }} (Build: ${{ github.sha }})"
}' > payload.json
curl -X POST -H "Authorization: token ${GH_TOKEN}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/Zerohertz/zerohertzLib/pulls \
-d @payload.json
- name: Slack webhook
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: zerohertzLib
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
if_mention: failure,cancelled
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_CHECK }}
if: always()