Skip to content

Publish version change (#17) #60

Publish version change (#17)

Publish version change (#17) #60

Workflow file for this run

name: Build, test and publish
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build_and_test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ "3.8", "3.9", "3.10", "3.11" ]
steps:
- name: Install libegl1
run: sudo apt-get install -y libegl1
- name: Check out repository
uses: actions/checkout@v4
- name: Set up python
id: setup-python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
installer-parallel: true
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v3
with:
path: .venv
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}
- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root
- name: Install project
run: poetry install --no-interaction
- name: Lint with isort, black and flake8
run: |
poetry run isort visprompt
poetry run isort tests
poetry run black visprompt
poetry run black tests
poetry run flake8 visprompt
poetry run flake8 tests
continue-on-error: true
- name: Test with pytest
run: |
poetry run coverage erase
poetry run coverage run -a --source=./visprompt --branch -m pytest -s -v --black --isort tests --junit-xml=junit/test-results-${{ matrix.python-version }}.xml
poetry run coverage report
poetry run coverage xml
publish:
needs: build_and_test
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Fetch main branch
run: |
git fetch origin main:main --depth=1
- name: Get version from pyproject.toml in PR
id: pr_version
run: |
PR_VERSION=$(grep -Po '(?<=version = ")[^"]*' pyproject.toml)
echo "PR version: $PR_VERSION"
echo "::set-output name=pr_version::$PR_VERSION"
- name: Get version from pyproject.toml in main
id: main_version
run: |
git checkout main
MAIN_VERSION=$(grep -Po '(?<=version = ")[^"]*' pyproject.toml)
echo "Main version: $MAIN_VERSION"
echo "::set-output name=main_version::$MAIN_VERSION"
- name: Compare versions and set flag
run: |
if [[ "${{ steps.pr_version.outputs.pr_version }}" != "${{ steps.main_version.outputs.main_version }}" ]]; then
echo "Version changed from ${{ steps.main_version.outputs.main_version }} to ${{ steps.pr_version.outputs.pr_version }}."
echo "::set-output name=should_publish::true"
else
echo "No version change detected."
echo "::set-output name=should_publish::false"
fi
- name: Set up python
if: steps.check_version_change.outputs.should_publish == 'true'
id: setup-python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Poetry
if: steps.check_version_change.outputs.should_publish == 'true'
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
installer-parallel: true
- name: Load cached venv
if: steps.check_version_change.outputs.should_publish == 'true'
uses: actions/cache@v3
with:
path: .venv
key: venv-${{ runner.os }}-3.x-${{ hashFiles('**/poetry.lock') }}
- name: Install dependencies
if: steps.check_version_change.outputs.should_publish == 'true' && steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root
- name: Install project
if: steps.check_version_change.outputs.should_publish == 'true'
run: poetry install --no-interaction
- name: Publish to PyPI
if: steps.check_version_change.outputs.should_publish == 'true'
env:
PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
run: |
poetry config pypi-token.pypi ${{ secrets.PYPI_API_TOKEN }}
poetry publish --build