Skip to content

chore(CENG-598): Migrate pipelines from CircleCi to GHA #25

chore(CENG-598): Migrate pipelines from CircleCi to GHA

chore(CENG-598): Migrate pipelines from CircleCi to GHA #25

Workflow file for this run

name: Test
on:
push:
branches:
- '**'
pull_request:
branches:
- '**'
permissions:
contents: read
jobs:
# Linting jobs run in parallel
isort:
name: Check import sorting (isort)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
cache-dependency-path: requirements.txt
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run isort
run: pre-commit run -a isort
black:
name: Check code formatting (black)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
cache-dependency-path: requirements.txt
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run black
run: pre-commit run -a black
flake8:
name: Check code style (flake8)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
cache-dependency-path: requirements.txt
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run flake8
run: pre-commit run -a flake8
pyupgrade:
name: Check for Python upgrades (pyupgrade)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
cache-dependency-path: requirements.txt
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run pyupgrade
run: pre-commit run -a pyupgrade
pylint:
name: Run comprehensive linting (pylint)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
cache-dependency-path: requirements.txt
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run pylint
run: pylint --rcfile=.pylintrc cloudsmith_cli
# Test jobs run across Python versions
pytest:
name: Run tests (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: requirements.txt
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Install package
run: pip install -e .
- name: Run pytest
env:
PYTEST_CLOUDSMITH_API_KEY: ${{ secrets.PYTEST_CLOUDSMITH_API_KEY }}
PYTEST_CLOUDSMITH_API_HOST: ${{ vars.PYTEST_CLOUDSMITH_API_HOST }}
PYTEST_CLOUDSMITH_ORGANIZATION: ${{ vars.PYTEST_CLOUDSMITH_ORGANIZATION }}
run: pytest --junitxml=./reports/pytest.xml
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-${{ matrix.python-version }}
path: ./reports/pytest.xml
retention-days: 30
# Test zipapp build with pex for cross-platform support
test-zipapp-build:
name: Test zipapp build (pex)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
- name: Install pex
run: pip install pex
- name: Get version
id: get_version
run: echo "VERSION=$(cat cloudsmith_cli/data/VERSION)" >> $GITHUB_ENV
- name: Create Zipapp with pex (cross-platform)
run: |
pex . \
--output-file cloudsmith-${{ env.VERSION }}.pyz \
--console-script cloudsmith \
--python-shebang "/usr/bin/env python3" \
--venv \
--complete-platform .github/.platforms/linux-x86_64.json \
--complete-platform .github/.platforms/linux-aarch64.json \
--complete-platform .github/.platforms/linux-x86_64-musl.json \
--complete-platform .github/.platforms/linux-aarch64-musl.json \
--complete-platform .github/.platforms/macos-arm64.json \
--complete-platform .github/.platforms/windows-x86_64.json
- name: Make executable
run: chmod +x cloudsmith-${{ env.VERSION }}.pyz
- name: Validate zipapp execution
run: |
OUTPUT=$(./cloudsmith-${{ env.VERSION }}.pyz --version)
echo "Zipapp Version: $OUTPUT"
echo "$OUTPUT" | grep "${{ env.VERSION }}"
- name: Upload zipapp artifact
uses: actions/upload-artifact@v4
with:
name: zipapp
path: cloudsmith-${{ env.VERSION }}.pyz
retention-days: 1
# Test zipapp execution across Python versions
test-zipapp-execution:
name: Test zipapp execution (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
needs: test-zipapp-build
strategy:
fail-fast: false
matrix:
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Get version
run: echo "VERSION=$(cat cloudsmith_cli/data/VERSION)" >> $GITHUB_ENV
- name: Download zipapp artifact
uses: actions/download-artifact@v4
with:
name: zipapp
- name: Make executable
run: chmod +x cloudsmith-${{ env.VERSION }}.pyz
- name: Validate zipapp execution
run: |
OUTPUT=$(python${{ matrix.python-version }} cloudsmith-${{ env.VERSION }}.pyz --version)
echo "Zipapp Version (Python ${{ matrix.python-version }}): $OUTPUT"
echo "$OUTPUT" | grep "${{ env.VERSION }}"