diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 96e115b..e7207c2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,139 +5,17 @@ on: branches: - master - renovate/* + - dev/* tags: - v* pull_request: branches: - master + - dev/* jobs: - test: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - name: Install dependencies (with all extras) - run: | - python -m pip install --upgrade poetry - poetry install $(cat pyproject.toml | awk '/^\s*$/{f=0};f{if ($1!="docs") printf(" -E %s",$1)};/\[tool\.poetry\.extras\]/{f=1}') - - run: poetry run pytest --cov=ampel - - mypy: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - name: Install dependencies (with all extras) - run: | - python -m pip install --upgrade poetry - poetry install $(cat pyproject.toml | awk '/^\s*$/{f=0};f{if ($1!="docs") printf(" -E %s",$1)};/\[tool\.poetry\.extras\]/{f=1}') - - run: poetry run mypy --namespace-packages -p ampel - - check_version: - name: Tag version bump - runs-on: ubuntu-latest - # run only on pushes, not PRs - if: ${{ github.event_name == 'push' && github.base_ref == null }} - needs: [test, mypy] - outputs: - should_publish: ${{ steps.check.outputs.result }} - steps: - - uses: actions/setup-node@v4 - with: - node-version: 14 - - run: npm install toml@3.0.0 - - name: Ensure tag for version bump - id: check - uses: actions/github-script@v7 - with: - script: | - const toml = require('toml') - async function getVersion(ref) { - try { - response = await github.rest.repos.getContent({ - repo: context.repo.repo, - owner: context.repo.owner, - path: 'pyproject.toml', - ref: ref - }); - return toml.parse(Buffer.from(response.data.content, 'base64').toString()) - .tool - .poetry - .version; - } catch (exc) { - if (exc.name == 'HttpError' && exc.status == 404) { - return null; - } else { - throw exc; - } - } - } - after = await getVersion(context.payload.after); - ref = `refs/tags/v${after}` - is_main = context.payload.ref === `refs/heads/${context.payload.repository.default_branch}` - - // a tag matching the version was just pushed - let release = context.payload.ref == ref; - if (release) { - console.log(`Tag v${after} pushed (${context.sha})`); - } - // the version on the default branch changed; create a tag - if (!release && is_main) { - before = await getVersion(context.payload.before); - if (before !== after) { - console.log(`Version bumped: ${before} -> ${after}`); - try { - await github.rest.git.createRef({ - owner: context.repo.owner, - repo: context.repo.repo, - ref, - sha: context.sha - }); - console.log(`Tag v${after} created (${context.sha})`); - release = true; - } catch (exc) { - // tag already existed - if (exc.name == 'HttpError' && exc.status == 422) { - console.log(`Skipping publish (tag v${after} already exists)`); - release = false; - } else { - throw exc; - } - } - } else { - console.log(`Skipping publish (version is still ${before})`); - } - } else if (!is_main) { - console.log(`Skipping publish (push to ${context.payload.ref} != refs/heads/${context.payload.repository.default_branch})`); - } - return release; - - pypi: - name: Publish to PyPI - runs-on: ubuntu-latest - needs: [check_version] - # NB: outputs are always strings; explicitly parse to get a boolean - if: ${{ fromJSON(needs.check_version.outputs.should_publish) }} - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - name: Install poetry - run: | - python -m pip install --upgrade poetry - - name: Publish - run: | - poetry config repositories.testpypi https://test.pypi.org/legacy/ - poetry publish -n --build - env: - POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_API_TOKEN }} - POETRY_PYPI_TOKEN_TESTPYPI: ${{ secrets.PYPI_TEST_API_TOKEN }} + ci: + uses: AmpelProject/Ampel-interface/.github/workflows/ci.yml@ci-py12-v1 + secrets: inherit + with: + mongo: true