Reboot project #4
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: Build | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
env: | |
PROJECT_NAME: mloq | |
PROJECT_DIR: src/mloq | |
VERSION_FILE: "src/mloq/version.py .bumpversion.cfg docs/_config.yml" | |
DEFAULT_BRANCH: main | |
BOT_NAME: fragile-bot | |
BOT_EMAIL: [email protected] | |
DOCKER_ORG: fragiletech | |
# LOCAL_CACHE: | | |
# ~/.local/bin | |
# ~/.local/lib/python3.*/site-packages | |
# /opt/homebrew | |
jobs: | |
style-check: | |
name: Style check | |
if: "!contains(github.event.head_commit.message, 'Bump version')" | |
runs-on: ubuntu-latest | |
steps: | |
- name: actions/checkout | |
uses: actions/checkout@v4 | |
- name: Setup Rye | |
id: setup-rye | |
uses: eifinger/setup-rye@v4 | |
with: | |
enable-cache: true | |
cache-prefix: ubuntu-20.04-rye-check-${{ hashFiles('pyproject.toml') }} | |
- name: Run style check and linter | |
run: | | |
set -x | |
rye fmt --check | |
rye lint | |
pytest-rye: | |
name: Run pytest and coverage with Rye | |
if: "!contains(github.event.head_commit.message, 'Bump version')" | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: ["ubuntu-latest", "macos-latest"] | |
python-version: ['3.10'] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Rye | |
id: setup-rye | |
uses: eifinger/setup-rye@v4 | |
with: | |
enable-cache: true | |
cache-prefix: ${{ matrix.os }}-latest-rye-test-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }} | |
# - name: actions/cache | |
# uses: actions/cache@v4 | |
# with: | |
# path: ${{ env.LOCAL_CACHE }} | |
# key: ${{ matrix.os }}-latest-rye-test-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }} | |
# restore-keys: ${{ matrix.os }}-latest-rye-test-${{ matrix.python-version }} | |
- name: Install Ubuntu test and package dependencies | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: | | |
set -x | |
rye pin --relaxed cpython@${{ matrix.python-version }} | |
rye sync --all-features | |
- name: Install MacOS test and package dependencies | |
if: ${{ matrix.os == 'macos-latest' }} | |
run: | | |
set -x | |
rye pin --relaxed cpython@${{ matrix.python-version }} | |
rye sync --all-features | |
- name: Run Pytest on MacOS with rye | |
if: ${{ matrix.os == 'macos-latest' }} | |
run: | | |
set -x | |
rye run test | |
- name: Run code coverage on Ubuntu with rye | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: | | |
set -x | |
rye run cov | |
- name: Upload coverage report | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
if: ${{ matrix.python-version == '3.10' && matrix.os == 'ubuntu-latest' && env.CODECOV_TOKEN != '' }} | |
uses: codecov/codecov-action@v4 | |
with: | |
fail_ci_if_error: false # optional (default = false) | |
files: ./coverage.xml | |
flags: unittests # optional | |
name: codecov-umbrella # optional | |
token: ${{ secrets.CODECOV_TOKEN }} # required | |
verbose: true # optional (default = false) | |
build-test-package: | |
name: Build and test the package | |
needs: style-check | |
runs-on: ubuntu-latest | |
if: "!contains(github.event.head_commit.message, 'Bump version')" | |
permissions: | |
contents: write | |
id-token: write | |
steps: | |
- name: actions/checkout | |
uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
fetch-depth: 100 | |
- name: Set Git user | |
run: | | |
git config --global user.name "${{ env.BOT_NAME }}" | |
git config --global user.email "${{ env.BOT_EMAIL }}" | |
- name: Setup Rye | |
id: setup-rye | |
uses: eifinger/setup-rye@v4 | |
with: | |
enable-cache: true | |
cache-prefix: ubuntu-latest-rye-build-3.10-${{ hashFiles('pyproject.toml') }} | |
# - name: actions/cache | |
# uses: actions/cache@v4 | |
# with: | |
# path: ${{ env.LOCAL_CACHE }} | |
# key: ubuntu-latest-system-build-3.10-${{ hashFiles('pyproject.toml') }} | |
# restore-keys: ubuntu-latest-system-test | |
- name: Install build dependencies | |
run: | | |
set -x | |
rye pin --relaxed [email protected] | |
rye install bump2version | |
rye install twine | |
- name: Create unique version for test.pypi | |
run: | | |
set -x | |
current_version=$(grep __version__ $VERSION_FILE | cut -d\" -f2) | |
ts=$(date +%s) | |
new_version="$current_version$ts" | |
bumpversion --current-version $current_version --new-version $new_version patch $VERSION_FILE | |
- name: Build package | |
run: | | |
set -x | |
rye build --clean | |
twine check dist/* | |
- name: Publish 📦 to Test PyPI | |
env: | |
TEST_PYPI_PASS: ${{ secrets.TEST_PYPI_PASS }} | |
if: "'$TEST_PYPI_PASS' != ''" | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.TEST_PYPI_PASS }} | |
repository-url: https://test.pypi.org/legacy/ | |
skip-existing: true | |
bump-version: | |
name: Bump package version | |
env: | |
BOT_AUTH_TOKEN: ${{ secrets.BOT_AUTH_TOKEN }} | |
if: "!contains(github.event.head_commit.message, 'Bump version') && github.ref == 'refs/heads/main' && '$BOT_AUTH_TOKEN' != ''" | |
runs-on: ubuntu-latest | |
needs: | |
- pytest-rye | |
- build-test-package | |
steps: | |
- name: actions/checkout | |
uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
fetch-depth: 100 | |
- name: current_version | |
run: | | |
set -x | |
echo "current_version=$(grep __version__ $VERSION_FILE | cut -d\" -f2)" >> $GITHUB_ENV | |
echo "version_file=$VERSION_FILE" >> $GITHUB_ENV | |
echo 'bot_name="${BOT_NAME}"' >> $GITHUB_ENV | |
echo 'bot_email="${BOT_EMAIL}"' >> $GITHUB_ENV | |
- name: FragileTech/bump-version | |
uses: FragileTech/bump-version@main | |
with: | |
current_version: "${{ env.current_version }}" | |
files: "${{ env.version_file }}" | |
commit_name: "${{ env.bot_name }}" | |
commit_email: "${{ env.bot_email }}" | |
login: "${{ env.bot_name }}" | |
token: "${{ secrets.BOT_AUTH_TOKEN }}" | |
release-package: | |
name: Release PyPI package | |
env: | |
PYPI_PASS: ${{ secrets.PYPI_PASS }} | |
if: "contains(github.event.head_commit.message, 'Bump version') && github.ref == 'refs/heads/main' && '$PYPI_PASS' != ''" | |
permissions: | |
contents: write | |
id-token: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: actions/checkout | |
uses: actions/checkout@v4 | |
- name: Setup Rye | |
id: setup-rye | |
uses: eifinger/setup-rye@v4 | |
with: | |
enable-cache: true | |
cache-prefix: ubuntu-latest-rye-release-3.10-${{ hashFiles('pyproject.toml') }} | |
- name: Install dependencies | |
run: | | |
set -x | |
rye pin --relaxed [email protected] | |
rye install twine | |
- name: Build package | |
run: | | |
set -x | |
rye build --clean | |
twine check dist/* | |
- name: Publish 📦 to PyPI | |
env: | |
PYPI_PASS: ${{ secrets.PYPI_PASS }} | |
if: "'$PYPI_PASS' != ''" | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.PYPI_PASS }} | |
skip-existing: true | |
# | |
# release: | |
# runs-on: ubuntu-latest | |
# environment: release | |
# needs: test | |
# if: startsWith(github.ref, 'refs/tags/') | |
# permissions: | |
# contents: write | |
# id-token: write | |
# | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - name: Set up Python ${{ matrix.python-version }} | |
# uses: actions/setup-python@v5 | |
# with: | |
# python-version: '3.10' | |
# - name: Install dependencies | |
# shell: bash | |
# run: | | |
# python -m pip install --upgrade pip | |
# pip install hatch pre-commit | |
# - name: Build | |
# run: | | |
# hatch build | |
# - name: Publish 📦 to Test PyPI | |
# if: startsWith(github.ref, 'refs/heads/main') | |
# uses: pypa/gh-action-pypi-publish@release/v1 | |
# with: | |
# skip_existing: true | |
# user: __token__ | |
# password: ${{ secrets.TEST_PYPI_SECRECT }} | |
# packages-dir: dist/ | |
# repository-url: https://test.pypi.org/legacy/ | |
# - name: Publish 📦 to PyPI | |
# if: startsWith(github.ref, 'refs/heads/main') | |
# uses: pypa/gh-action-pypi-publish@release/v1 | |
# with: | |
# user: __token__ | |
# password: ${{ secrets.PYPI_SECRECT }} | |
# packages-dir: dist/ |