name: Build and Release tokenspeed-kernel-amd on: workflow_dispatch: inputs: tag_name: description: "Git tag to create or update. Defaults to tokenspeed-kernel-amd-v." required: false type: string prerelease: description: "Mark the GitHub release as a prerelease." required: false default: false type: boolean permissions: contents: read id-token: write concurrency: group: ${{ github.workflow }} cancel-in-progress: true jobs: metadata: name: Resolve release metadata runs-on: ubuntu-latest outputs: version: ${{ steps.metadata.outputs.version }} tag_name: ${{ steps.metadata.outputs.tag_name }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Resolve release metadata id: metadata run: | VERSION=$(python - <<'PY' import pathlib import tomllib data = tomllib.loads(pathlib.Path("tokenspeed-kernel-amd/pyproject.toml").read_text()) print(data["project"]["version"]) PY ) TAG_NAME="${{ inputs.tag_name }}" if [ -z "$TAG_NAME" ]; then TAG_NAME="tokenspeed-kernel-amd-v${VERSION}" fi echo "version=${VERSION}" >> "$GITHUB_OUTPUT" echo "tag_name=${TAG_NAME}" >> "$GITHUB_OUTPUT" echo "Release version: ${VERSION}" echo "Release tag: ${TAG_NAME}" build: name: Build distributions needs: metadata runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Build distributions run: | python -m pip install --upgrade build twine "setuptools<82" wheel python -m build tokenspeed-kernel-amd --sdist --wheel --no-isolation --outdir dist python -m twine check dist/* - name: Upload distributions uses: actions/upload-artifact@v4 with: name: tokenspeed-kernel-amd-dist path: dist/* release: name: Create wheelhouse release needs: [metadata, build] runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Download distributions uses: actions/download-artifact@v4 with: path: dist pattern: tokenspeed-kernel-amd-* merge-multiple: true - name: Create or update GitHub release env: GH_TOKEN: ${{ secrets.LIGHTSEEK_BOT_TOKEN }} RELEASE_REPOSITORY: lightseekorg/whl TAG_NAME: ${{ needs.metadata.outputs.tag_name }} VERSION: ${{ needs.metadata.outputs.version }} PRERELEASE: ${{ inputs.prerelease }} SOURCE_SHA: ${{ github.sha }} run: | prerelease_args=() if [ "$PRERELEASE" = "true" ]; then prerelease_args+=(--prerelease) fi if gh release view "$TAG_NAME" --repo "$RELEASE_REPOSITORY" >/dev/null 2>&1; then gh release upload "$TAG_NAME" dist/* --repo "$RELEASE_REPOSITORY" --clobber else gh release create "$TAG_NAME" dist/* \ --repo "$RELEASE_REPOSITORY" \ --title "tokenspeed-kernel-amd ${VERSION}" \ --notes "tokenspeed-kernel-amd ${VERSION} built from lightseekorg/tokenspeed@${SOURCE_SHA}" \ "${prerelease_args[@]}" fi publish-pypi: name: Publish to PyPI needs: [metadata, build] runs-on: ubuntu-latest environment: pypi steps: - name: Download distributions uses: actions/download-artifact@v4 with: path: dist pattern: tokenspeed-kernel-amd-* merge-multiple: true - name: Publish distributions to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: packages-dir: dist