Skip to content

[v1.2.8] Release

[v1.2.8] Release #148

name: "CI/CD Pipeline (PR: to master)"
on:
pull_request:
branches:
- master
permissions:
contents: write
actions: read
env:
PYTHON_VERSION: "3.12"
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 Example Images & GitHub Release Note"
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 Example Images & GitHub Release Note'* ) ]]; then
echo "Commit message meets the criteria."
else
echo "Commit message does not meet the criteria."
exit 1
fi
build:
runs-on: ubuntu-latest
needs: [check-commit]
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
# [`master` PR] (Except "Merge pull request*/docs" && "Merge pull request*[Docs] Build Example Images & GitHub Release Note")
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 Example Images & GitHub Release Note')))
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
version: "latest"
enable-cache: true
- name: Set up Python
run: uv python install ${{ matrix.python-version }}
- name: Install dependencies
run: |
uv sync --extra all
lint:
runs-on: ubuntu-latest
needs: [build]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
version: "latest"
enable-cache: true
- name: Set up Python
run: uv python install ${{ env.PYTHON_VERSION }}
- name: Install dependencies and lint
run: |
uvx ruff check .
uvx ruff format --check .
test:
runs-on: ubuntu-latest
needs: [build]
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
version: "latest"
enable-cache: true
- name: Set up Python
run: uv python install ${{ matrix.python-version }}
- name: Start Triton Inference Server
run: |
docker run -d --name triton-inference-server \
-p 8000:8000 -p 8001:8001 \
-v ${{ github.workspace }}:/mnt/zerohertzLib \
-v ${{ github.workspace }}/test/data/triton-inference-server:/models \
nvcr.io/nvidia/tritonserver:25.08-py3 \
bash -c "cp -r /mnt/zerohertzLib /tmp/zerohertzLib && echo hi && pip install /tmp/zerohertzLib[mlops] && tritonserver --model-repository /models --model-control-mode=explicit"
- name: Wait for Triton Inference Server to be ready
run: |
echo "Waiting for Triton Inference Server to be ready..."
timeout 60 bash -c 'until curl -f http://localhost:8000/v2/health/ready; do sleep 2; done'
echo "Triton Inference Server is ready!"
- name: Run tests
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
DISCORD_BOT_TOKEN: ${{ secrets.DISCORD_BOT_TOKEN }}
DISCORD_BOT_CHANNEL: ${{ secrets.DISCORD_BOT_CHANNEL }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
sudo apt update
sudo apt install python3-opencv -y
uv sync --extra all
uv pip install pytest pytest-xdist pytest-cov
uv run pytest --durations=0 -vv -n auto --dist=loadfile --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()
docs:
runs-on: ubuntu-latest
needs: [lint, test]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
version: "latest"
enable-cache: true
- name: Set up Python
run: uv python install ${{ 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 example images
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
uv sync --extra all
uv run docs/mkdocs/scripts/release_note.py --token ${GH_TOKEN}
uv run docs/mkdocs/scripts/example_images.py
- name: Commit and push on docs branch
env:
GH_USERNAME: ${{ secrets.GH_USERNAME }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
git config --global user.email "ohg3417@gmail.com"
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/assets
git commit -m ':memo: docs: example images (#${{ github.event.pull_request.number }})'
git add docs/release
git commit -m ':memo: docs: release note (#${{ github.event.pull_request.number }})'
git push origin docs
echo '{
"title": "[Docs] Build Example Images & GitHub Release Note",
"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