mirror of
https://github.com/XuehaiPan/nvitop.git
synced 2026-05-15 06:06:12 -06:00
192 lines
6 KiB
YAML
192 lines
6 KiB
YAML
name: Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main # allow to trigger the workflow with tag push event
|
|
pull_request:
|
|
paths:
|
|
- setup.py
|
|
- setup.cfg
|
|
- pyproject.toml
|
|
- MANIFEST.in
|
|
- nvitop/version.py
|
|
- Dockerfile
|
|
- .github/workflows/build.yaml
|
|
release:
|
|
types:
|
|
- published
|
|
# Allow to trigger the workflow manually
|
|
workflow_dispatch:
|
|
inputs:
|
|
task:
|
|
description: "Task type"
|
|
type: choice
|
|
options:
|
|
- build-only
|
|
- build-and-publish
|
|
required: true
|
|
|
|
concurrency:
|
|
group: "${{ github.workflow }}-${{ github.ref }}"
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
if: github.repository == 'XuehaiPan/nvitop'
|
|
timeout-minutes: 30
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Python
|
|
id: py
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.8 - 3.14"
|
|
update-environment: true
|
|
|
|
- name: Upgrade build dependencies
|
|
run: python -m pip install --upgrade pip setuptools wheel build
|
|
|
|
- name: Quick test
|
|
run: |
|
|
python -m venv venv &&
|
|
(
|
|
source venv/bin/activate &&
|
|
python -m pip install --upgrade pip setuptools pre-commit pylint[spelling] mypy typing-extensions &&
|
|
python -m pip install -r requirements.txt &&
|
|
python -m pip install -r nvitop-exporter/requirements.txt &&
|
|
python -m pre_commit install --install-hooks &&
|
|
python -m pre_commit run --all-files &&
|
|
python -c 'import nvitop' &&
|
|
python -m nvitop --version &&
|
|
python -m nvitop --help &&
|
|
python -m nvitop.select --version &&
|
|
python -m nvitop.select --help &&
|
|
(
|
|
cd nvitop-exporter &&
|
|
python -c 'import nvitop_exporter' &&
|
|
python -m nvitop_exporter --version &&
|
|
python -m nvitop_exporter --help
|
|
)
|
|
)
|
|
|
|
- name: Test docker build
|
|
run: |
|
|
docker build --tag nvitop:latest .
|
|
docker run --rm nvitop:latest --help
|
|
|
|
- name: Set __release__
|
|
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
|
|
run: |
|
|
sed -i -E 's/^__release__\s*=.*$/__release__ = True/' nvitop/version.py
|
|
sed -i -E 's/^__release__\s*=.*$/__release__ = True/' nvitop-exporter/nvitop_exporter/version.py
|
|
|
|
- name: Print version
|
|
run: |
|
|
python setup.py --version
|
|
python nvitop-exporter/setup.py --version
|
|
|
|
- name: Build sdist and wheels
|
|
run: |
|
|
python -m build --outdir dist .
|
|
python -m build --outdir dist nvitop-exporter
|
|
|
|
- name: List built sdist and wheels
|
|
run: ls -lh dist/
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: artifact
|
|
path: dist/*
|
|
if-no-files-found: error
|
|
|
|
publish:
|
|
runs-on: ubuntu-latest
|
|
needs: [build]
|
|
if: |
|
|
github.repository == 'XuehaiPan/nvitop' && github.event_name != 'pull_request' &&
|
|
(github.event_name != 'workflow_dispatch' || github.event.inputs.task == 'build-and-publish') &&
|
|
(github.event_name != 'push' || startsWith(github.ref, 'refs/tags/'))
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
with:
|
|
python-version: "3.8 - 3.14"
|
|
update-environment: true
|
|
|
|
- name: Upgrade pip
|
|
run: |
|
|
python -m pip install --upgrade pip setuptools
|
|
|
|
- name: Set __release__
|
|
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
|
|
run: |
|
|
sed -i -E 's/^__release__\s*=.*$/__release__ = True/' nvitop/version.py
|
|
sed -i -E 's/^__release__\s*=.*$/__release__ = True/' nvitop-exporter/nvitop_exporter/version.py
|
|
|
|
- name: Print version
|
|
run: |
|
|
python setup.py --version
|
|
python nvitop-exporter/setup.py --version
|
|
|
|
- name: Check consistency between the package version and release tag
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
run: |
|
|
RELEASE_TAG="${GITHUB_REF#refs/*/}"
|
|
PACKAGE_VER="v$(python setup.py --version)"
|
|
if [[ "${PACKAGE_VER}" != "${RELEASE_TAG}" ]]; then
|
|
echo "package ver. (${PACKAGE_VER}) != release tag. (${RELEASE_TAG})"
|
|
exit 1
|
|
fi
|
|
PACKAGE_VER="v$(python nvitop-exporter/setup.py --version)"
|
|
if [[ "${PACKAGE_VER}" != "${RELEASE_TAG}" ]]; then
|
|
echo "package ver. (${PACKAGE_VER}) != release tag. (${RELEASE_TAG})"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Download built sdist and wheels
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
# unpacks default artifact into dist/
|
|
# if `name: artifact` is omitted, the action will create extra parent dir
|
|
name: artifact
|
|
path: dist
|
|
|
|
- name: Publish to TestPyPI
|
|
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
with:
|
|
user: __token__
|
|
password: ${{ secrets.TESTPYPI_UPLOAD_TOKEN }}
|
|
repository-url: https://test.pypi.org/legacy/
|
|
verbose: true
|
|
print-hash: true
|
|
skip-existing: true
|
|
|
|
- name: Publish to PyPI
|
|
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
with:
|
|
user: __token__
|
|
password: ${{ secrets.PYPI_UPLOAD_TOKEN }}
|
|
verbose: true
|
|
print-hash: true
|
|
skip-existing: true
|