Skip to content

Commit

Permalink
Update test.pypi.org upload workflow (#25)
Browse files Browse the repository at this point in the history
* fix: Update some type-hinting directive comments.

* ci: Refactored the test.pypi.org upload workflow to have separate sections to limit elevated permissions usage.

* ci: Add a retry to the installation step to let the package become available on the index server.
  • Loading branch information
nfelt14 authored Oct 11, 2023
1 parent e7734d7 commit ab093ad
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 22 deletions.
65 changes: 45 additions & 20 deletions .github/workflows/package-testpypi.yml
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
---
# Upload to Test PyPI on every push to main
name: Publish package to test.pypi.org
on:
push:
branches: [main]
permissions:
contents: write
id-token: write
concurrency:
group: test-pypi-upload
group: pypi
jobs:
# Upload to Test PyPI on every push to main
test-pypi:
name: Publish package to test.pypi.org
test-pypi-build:
name: Build package with unique version for test.pypi.org
if: github.repository == 'tektronix/tm_devices'
runs-on: ubuntu-latest
environment: package-testpypi
steps:
- uses: actions/checkout@v3
with:
Expand All @@ -26,27 +22,56 @@ jobs:
python-version: 3.11
check-latest: true
- name: Install workflow dependencies
run: pip install poetry tomli tomli_w requests
run: pip install poetry-core tomli tomli_w requests
- name: Create unique package version
id: create-version
run: |
CURRENT_VERSION=$(python scripts/pypi_latest_version.py --package=tm_devices --index=test.pypi)
echo CURRENT_VERSION: $CURRENT_VERSION
NEW_VERSION=$(python scripts/create_post_version_for_testpypi.py --version=$CURRENT_VERSION)
echo NEW_VERSION: $NEW_VERSION
python scripts/project_version.py --set-version=$NEW_VERSION
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV
- uses: hynek/[email protected]
id: build-pkg
- name: Copy package to dist/ folder
run: |
mkdir -p dist/
cp ${{ steps.build-pkg.outputs.dist }}/*.whl ${{ steps.build-pkg.outputs.dist }}/*.tar.gz dist/
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_OUTPUT
- name: Build package
uses: hynek/[email protected]
outputs:
built-version: ${{ steps.create-version.outputs.NEW_VERSION }}
test-pypi-upload:
name: Upload package to test.pypi.org
needs: test-pypi-build
if: github.repository == 'tektronix/tm_devices'
runs-on: ubuntu-latest
environment: package-testpypi
permissions:
id-token: write
steps:
- name: Download built packages
uses: actions/download-artifact@v3
with:
name: Packages
path: dist
- name: Upload package to Test PyPI
uses: pypa/[email protected]
with:
repository-url: https://test.pypi.org/legacy/
- name: Wait for package to be available
run: sleep 30
test-pypi-install:
name: Install package from test.pypi.org
needs: [test-pypi-build, test-pypi-upload]
if: github.repository == 'tektronix/tm_devices'
runs-on: ubuntu-latest
steps:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: x
check-latest: true
- name: Test installing from test.pypi.org
run: pip install --index-url=https://test.pypi.org/simple/ --extra-index-url=https://pypi.org/simple
tm_devices==${{ env.NEW_VERSION }}
# A retry is used to allow for some downtime before the package is installable
uses: nick-fields/retry@v2
with:
timeout_minutes: 2
max_attempts: 5
retry_wait_seconds: 30
warning_on_retry: false
command: pip install --index-url=https://test.pypi.org/simple/ --extra-index-url=https://pypi.org/simple
tm_devices==${{ needs.test-pypi-build.outputs.built-version }}
2 changes: 1 addition & 1 deletion src/tm_devices/drivers/pi/scopes/tekscope/tekscope.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ def channel(self) -> "MappingProxyType[str, TekScopeChannel]":

# Set scope PI verbosity back to previous value
self.set_and_check(":VERBose", old_pi_verbosity)
return MappingProxyType(channel_map)
return MappingProxyType(channel_map) # pyright: ignore[reportUnknownVariableType]

@property
def commands(
Expand Down
2 changes: 1 addition & 1 deletion tests/test_device_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class TestDeviceManager: # pylint: disable=no-self-use
# Get the list of device types, ignore the unit test ones since
# this test only applies to actual supported devices.
"device_type",
list(filter(lambda x: "UNIT_TEST" not in x, (y.name for y in DeviceTypes))), # type: ignore
list(filter(lambda x: "UNIT_TEST" not in x, (y.name for y in DeviceTypes))),
)
def test_supported_device_type_methods(self, device_type: str) -> None:
"""Test that all supported device types have a getter method in the DeviceManager.
Expand Down

0 comments on commit ab093ad

Please sign in to comment.