/
niceSOFT
/
python3-setuptools_scm
Обзор
Документация
Войти
/
niceSOFT
/
python3-setuptools_scm
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
.github/workflows/python-tests.yml
308 строк
13 KB
dependabot[bot]
chore(deps): Bump the github-actions group with 2 updates
07 авг 2026, 21:23
Не верифицирован
07 авг 2026, 21:23
d50d836
Код
Авторство
О чём код?
name: python tests+artifacts+release on: pull_request: push: branches: - "*" tags: - "setuptools-scm-v*" - "vcs-versioning-v*" release: types: [published] # Tags created by GITHUB_TOKEN don't trigger push events for other workflows. # create-release-tags.yml dispatches this workflow explicitly after tagging. workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true permissions: {} env: FORCE_COLOR: 1 jobs: package: name: Build & inspect ${{ matrix.package }} runs-on: ubuntu-latest permissions: contents: read strategy: matrix: package: - vcs-versioning - setuptools-scm env: # Use no-local-version for package builds to ensure clean versions for PyPI uploads SETUPTOOLS_SCM_NO_LOCAL: "1" steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - name: Set pretend versions from release PR title if: github.event_name == 'pull_request' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: script: | const title = context.payload.pull_request.title; console.log(`PR title: ${title}`); const scmMatch = title.match(/setuptools-scm v(\d+\.\d+\.\d+)/); const vcsMatch = title.match(/vcs-versioning v(\d+\.\d+\.\d+)/); if (!scmMatch && !vcsMatch) { console.log('No release versions in PR title (normal for non-release PRs)'); return; } const fs = require('fs'); const envFile = process.env.GITHUB_ENV; if (scmMatch) { const ver = `${scmMatch[1]}.dev0`; fs.appendFileSync(envFile, `SETUPTOOLS_SCM_PRETEND_VERSION_FOR_SETUPTOOLS_SCM=${ver}\n`); console.log(`Set setuptools-scm pretend version: ${ver}`); } if (vcsMatch) { const ver = `${vcsMatch[1]}.dev0`; fs.appendFileSync(envFile, `SETUPTOOLS_SCM_PRETEND_VERSION_FOR_VCS_VERSIONING=${ver}\n`); fs.appendFileSync(envFile, `VCS_VERSIONING_PRETEND_VERSION_FOR_VCS_VERSIONING=${ver}\n`); console.log(`Set vcs-versioning pretend version: ${ver}`); } - name: Debug version inference shell: bash run: | echo "=== Version Debug for ${{ matrix.package }} ===" echo "Git describe:" git describe --dirty --tags --long --match "${{ matrix.package }}-*" 2>&1 || echo "(no matching tags)" echo "Relevant PRETEND env vars:" env | grep -i PRETEND || echo "(none set)" - name: Build ${{ matrix.package }} uses: hynek/build-and-inspect-python-package@2abe76da66d0a6a4a227101f9348ee855797cfa5 # v3.0.1 with: path: ${{ matrix.package }} upload-name-suffix: -${{ matrix.package }} test: needs: [package] runs-on: ${{ matrix.os }} permissions: contents: read strategy: fail-fast: false matrix: python_version: [ '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.11' ] os: [windows-latest, ubuntu-latest] #, macos-latest] include: - os: windows-latest python_version: 'msys2' env: # Enable tracemalloc to debug gc errors with popen objects (especially on Windows) PYTHONTRACEMALLOC: "1" name: ${{ matrix.os }} - Python ${{ matrix.python_version }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - name: Setup python uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 if: matrix.python_version != 'msys2' with: python-version: ${{ matrix.python_version }} architecture: x64 - name: Install the latest version of uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 - name: Setup MSYS2 uses: msys2/setup-msys2@66cd2cce69caa17b53920067426061ca1de3a884 # v2.32.0 if: matrix.python_version == 'msys2' with: msystem: MINGW64 install: git mingw-w64-x86_64-python mingw-w64-x86_64-python-setuptools update: true - name: Setup GnuPG and Mercurial on Windows # At present, the Windows VMs only come with the copy of GnuPG that's bundled # with Git for Windows. If we want to use this version _and_ be able to set # arbitrary GnuPG home directories, then the test would need to figure out when # to convert Windows-style paths into Unix-style paths with cygpath, which is # unreasonable. # # Instead, we'll install a version of GnuPG that can handle Windows-style paths. # However, due to <https://dev.gnupg.org/T5593>, installation fails if the PATH # environment variable is too long. Consequently, we need to shorten PATH to # something minimal before we can install GnuPG. For further details, see # <https://github.com/actions/virtual-environments/issues/2876>. # # Additionally, we'll explicitly set `gpg.program` to ensure Git for Windows # doesn't invoke the bundled GnuPG, otherwise we'll run into # <https://dev.gnupg.org/T5504>. See also: <https://dev.gnupg.org/T3020>. # # Windows runners no longer ship with Mercurial pre-installed, so we install # it via Chocolatey using the 'hg' package. run: | $env:PATH = "C:\Program Files\Git\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramData\Chocolatey\bin" [Environment]::SetEnvironmentVariable("Path", $env:PATH, "Machine") choco install gnupg hg -y --no-progress echo "C:\Program Files\gnupg\bin" >> $env:GITHUB_PATH echo "C:\Program Files\Mercurial\" >> $env:GITHUB_PATH git config --system gpg.program "C:\Program Files\gnupg\bin\gpg.exe" git config --system core.longpaths true mkdir "D:\Temp" echo "TEMP=D:\Temp" >> $env:GITHUB_ENV if: runner.os == 'Windows' - run: uv sync --all-packages --all-groups - name: Download vcs-versioning packages uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages-vcs-versioning path: dist - name: Download setuptools-scm packages uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages-setuptools-scm path: dist - name: Install built wheels shell: bash run: | # Use --no-deps: uv sync already resolved all dependencies from workspace; # we just replace the editable installs with the built wheels. uv pip install --no-deps dist/vcs_versioning-*.whl uv pip install --no-deps dist/setuptools_scm-*.whl - run: | $(hg debuginstall --template "{pythonexe}") -m pip install hg-git --user if: matrix.os == 'ubuntu-latest' # this hopefully helps with os caches, hg init sometimes gets 20s timeouts - run: hg version shell: bash - name: Install Jujutsu (jj) on Linux if: runner.os == 'Linux' run: | JJ_VERSION="0.42.0" curl -fsSL "https://github.com/jj-vcs/jj/releases/download/v${JJ_VERSION}/jj-v${JJ_VERSION}-x86_64-unknown-linux-musl.tar.gz" \ | tar xz --strip-components=0 -C /usr/local/bin ./jj jj version - name: Install Jujutsu (jj) on Windows if: runner.os == 'Windows' && matrix.python_version != 'msys2' shell: pwsh run: | $JJ_VERSION = "0.42.0" Invoke-WebRequest -Uri "https://github.com/jj-vcs/jj/releases/download/v${JJ_VERSION}/jj-v${JJ_VERSION}-x86_64-pc-windows-msvc.zip" -OutFile jj.zip Expand-Archive jj.zip -DestinationPath "$env:RUNNER_TEMP\jj" echo "$env:RUNNER_TEMP\jj" >> $env:GITHUB_PATH & "$env:RUNNER_TEMP\jj\jj.exe" version - name: Run tests for both packages run: uv run --no-sync pytest setuptools-scm/testing_scm/ vcs-versioning/testing_vcs/ timeout-minutes: 25 dist_upload_setuptools_scm: runs-on: ubuntu-latest if: | github.repository == 'pypa/setuptools-scm' && ((github.event_name == 'push' && startsWith(github.ref, 'refs/tags/setuptools-scm-v')) || (github.event_name == 'workflow_dispatch' && startsWith(github.ref, 'refs/tags/setuptools-scm-v')) || (github.event_name == 'release' && github.event.action == 'published' && startsWith(github.event.release.tag_name, 'setuptools-scm-v'))) permissions: id-token: write needs: [test] steps: - name: Download setuptools-scm packages uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages-setuptools-scm path: dist - name: Publish setuptools-scm to PyPI uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2 dist_upload_vcs_versioning: runs-on: ubuntu-latest if: | github.repository == 'pypa/setuptools-scm' && ((github.event_name == 'push' && startsWith(github.ref, 'refs/tags/vcs-versioning-v')) || (github.event_name == 'workflow_dispatch' && startsWith(github.ref, 'refs/tags/vcs-versioning-v')) || (github.event_name == 'release' && github.event.action == 'published' && startsWith(github.event.release.tag_name, 'vcs-versioning-v'))) permissions: id-token: write needs: [test] steps: - name: Download vcs-versioning packages uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages-vcs-versioning path: dist - name: Publish vcs-versioning to PyPI uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2 upload-release-assets-setuptools-scm: runs-on: ubuntu-latest if: | github.repository == 'pypa/setuptools-scm' && ((github.event_name == 'release' && github.event.action == 'published' && startsWith(github.event.release.tag_name, 'setuptools-scm-v')) || (github.event_name == 'workflow_dispatch' && startsWith(github.ref, 'refs/tags/setuptools-scm-v'))) needs: [test] permissions: contents: write steps: - name: Download setuptools-scm packages uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages-setuptools-scm path: dist - name: Upload release assets uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 with: files: dist/* fail_on_unmatched_files: true upload-release-assets-vcs-versioning: runs-on: ubuntu-latest if: | github.repository == 'pypa/setuptools-scm' && ((github.event_name == 'release' && github.event.action == 'published' && startsWith(github.event.release.tag_name, 'vcs-versioning-v')) || (github.event_name == 'workflow_dispatch' && startsWith(github.ref, 'refs/tags/vcs-versioning-v'))) needs: [test] permissions: contents: write steps: - name: Download vcs-versioning packages uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages-vcs-versioning path: dist - name: Upload release assets uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 with: files: dist/* fail_on_unmatched_files: true test-pypi-upload: runs-on: ubuntu-latest if: | github.repository == 'pypa/setuptools-scm' && github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') needs: [test] permissions: id-token: write steps: - name: Download vcs-versioning packages uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages-vcs-versioning path: dist - name: Download setuptools-scm packages uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: Packages-setuptools-scm path: dist - name: Publish package to PyPI continue-on-error: true uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2 with: repository-url: https://test.pypi.org/legacy/