diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6c6733bc..86ce20be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ on: - main concurrency: - group: ${{ github.ref }} + group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true defaults: @@ -162,28 +162,27 @@ jobs: uses: ./.github/workflows/python-package-create.yml with: repository: beeware/${{ matrix.repo }} - tox-source: ${{ matrix.tox-source }} - tox-factors: ${{ matrix.tox-factors }} - distribution-path: ${{ matrix.dist-path }} build-subdirectory: ${{ matrix.build-subdir }} + runner-os: ${{ matrix.runner-os }} strategy: fail-fast: false matrix: - repo: [ briefcase, gbulb, rubicon-objc, toga ] + name: [ briefcase, gbulb, rubicon-objc, toga, toga-android ] include: - - tox-source: .[dev] - - dist-path: dist - - repo: briefcase - tox-source: .[dev] - tox-factors: -with-automation - dist-path: dist - - repo: gbulb - tox-source: tox - dist-path: dist - - repo: toga - tox-source: ./core[dev] - dist-path: "*/dist/*" + - runner-os: ubuntu-latest + - name: briefcase + repo: briefcase + - name: gbulb + repo: gbulb + - name: rubicon-objc + repo: rubicon-objc + runner-os: macos-14 + - name: toga + repo: toga build-subdir: core + - name: toga-android + repo: toga + build-subdir: android test-verify-projects-briefcase: name: Verify Project diff --git a/.github/workflows/python-package-create.yml b/.github/workflows/python-package-create.yml index 5147069c..feee8859 100644 --- a/.github/workflows/python-package-create.yml +++ b/.github/workflows/python-package-create.yml @@ -7,30 +7,14 @@ name: Create Python Package on: workflow_call: inputs: - python-version: - description: "Python version to use; defaults to latest Python release." - default: "3.X" - type: string repository: description: "GitHub repository to checkout; defaults to repo running this workflow." default: ${{ github.repository }} type: string - tox-source: - description: "The arguments for `pip install` to install tox; use ./path/to/package[dev] for the repo's pinned version." - default: ".[dev]" - type: string - tox-factors: - description: "The tox factors to append to the package command." - default: "" - type: string build-subdirectory: description: "The subdirectory to build as a wheel." default: "" type: string - distribution-path: - description: "Relative filepath to distribution(s); e.g. */dist/*" - default: "dist" - type: string runner-os: description: "Runner OS to use to run tox; defaults to ubuntu-latest" default: "ubuntu-latest" @@ -53,13 +37,19 @@ jobs: package: name: Create Python Package runs-on: ${{ inputs.runner-os }} + permissions: + id-token: write + contents: read + attestations: write outputs: - artifact-name: packages-${{ steps.package.outputs.name }} + artifact-name: "Packages-${{ steps.package.outputs.name }}" steps: - name: Determine Package Name - id: package - run: echo "name=$(basename '${{ inputs.repository }}')" >> ${GITHUB_OUTPUT} + id: config + run: | + NAME=$(basename '${{ inputs.repository }}')${{ inputs.build-subdirectory && format('-{0}', inputs.build-subdirectory) || '' }} + echo "package-name=${NAME}" | tee -a ${GITHUB_OUTPUT} - name: Checkout uses: actions/checkout@v4.1.6 @@ -67,32 +57,8 @@ jobs: repository: ${{ inputs.repository }} fetch-depth: 0 # Fetch all refs so setuptools_scm can generate the correct version number - - name: Setup Python - uses: actions/setup-python@v5.1.0 - with: - python-version: ${{ inputs.python-version }} - cache: pip - cache-dependency-path: | - **/setup.cfg - **/pyproject.toml - - - name: Update pip - run: python -m pip install -U pip - - - name: Install tox - run: python -m pip install ${{ inputs.tox-source }} - - - name: Build Wheels - if: inputs.build-subdirectory == '' - run: tox -e package${{ inputs.tox-factors }} - - - name: Build Wheels from Subdirectory - if: inputs.build-subdirectory != '' - run: tox -e package${{ inputs.tox-factors }} -- ${{ inputs.build-subdirectory }} - - - name: Upload Package - uses: actions/upload-artifact@v4.3.3 + - name: Build & Upload Package + uses: hynek/build-and-inspect-python-package@v2.5.0 with: - name: packages-${{ steps.package.outputs.name }}${{ inputs.build-subdirectory && format('-{0}', inputs.build-subdirectory) || '' }} - path: ${{ inputs.distribution-path }} - if-no-files-found: error + path: ${{ inputs.build-subdirectory || '.' }} + upload-name-suffix: ${{ format('-{0}', steps.config.outputs.package-name) }}