Skip to content

[v1.1.8] Docs update #63

[v1.1.8] Docs update

[v1.1.8] Docs update #63

name: "CI/CD Pipeline (PR: to master)"
on:
pull_request:
branches:
- master
permissions:
contents: write
actions: read
env:
PYTHON_VERSION: "3.11"
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]
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
# [`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: ${{ matrix.python-version }}
- name: Cache virtualenv
uses: actions/cache@v4
with:
path: venv
key: ${{ runner.os }}-python-venv-${{ matrix.python-version }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-python-venv-${{ matrix.python-version }}-
- name: Install dependencies
run: |
python -m venv venv
source venv/bin/activate
pip uninstall zerohertzLib -y
pip install .'[all]' --no-cache-dir
- 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: ${{ env.PYTHON_VERSION }}
- name: Cache virtualenv
uses: actions/cache@v4
with:
path: venv
key: ${{ runner.os }}-python-venv-${{ env.PYTHON_VERSION }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-python-venv-${{ env.PYTHON_VERSION }}-
- 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]
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
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: ${{ matrix.python-version }}
- name: Cache virtualenv
uses: actions/cache@v4
with:
path: venv
key: ${{ runner.os }}-python-venv-${{ matrix.python-version }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-python-venv-${{ matrix.python-version }}-
- 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
PYTHONPATH=. pytest --cov=zerohertzLib --cov-report=xml --junitxml=junit.xml -o junit_family=legacy
- name: Upload test results to Codecov
uses: codecov/test-results-action@v1
with:
flags: python${{ matrix.python-version }}
token: ${{ secrets.CODECOV_TOKEN }}
if: always()
- name: Upload results to Codecov
uses: codecov/codecov-action@v4
with:
flags: python${{ matrix.python-version }}
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: ${{ env.PYTHON_VERSION }}
- name: Cache virtualenv
uses: actions/cache@v4
with:
path: venv
key: ${{ runner.os }}-python-venv-${{ env.PYTHON_VERSION }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-python-venv-${{ env.PYTHON_VERSION }}-
- 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()