[v1.2.8] Release #148
Workflow file for this run
This file contains hidden or 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 | |
| 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 |