[v1.1.6] Release #21
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |