Package Release #97
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Package Release | |
# A manual workflow, triggered from the UI | |
on: | |
workflow_dispatch: | |
branches: | |
- main | |
inputs: | |
py_release: | |
description: Python Release | |
type: boolean | |
required: false | |
default: false | |
py_version: | |
description: Python Version | |
default: 0.0.7 | |
js_release: | |
description: JS Release | |
type: boolean | |
required: false | |
default: false | |
js_version: | |
description: JS Version | |
default: 0.0.28 | |
py_rust_release: | |
description: Rust-backed Python Release | |
type: boolean | |
required: false | |
default: false | |
py_rust_version: | |
description: Rust-backed Python Version | |
default: 0.0.3 | |
rust_release: | |
description: Rust Release | |
type: boolean | |
required: false | |
default: false | |
rust_version: | |
description: Rust Version | |
default: 0.0.48 | |
jobs: | |
commit_versions: | |
name: Bump Pkg Versions | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
outputs: | |
new-sha: ${{ steps.sha.outputs.SHA }} | |
steps: | |
- name: Checks out repo with a token that allows pushing to main without PR | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.VERSION_BOT_PAT }} | |
- uses: actions/setup-python@v4 | |
- uses: ./.github/actions/install-pre-commit | |
- name: Install zetch | |
run: pip install zetch | |
- name: Set up PDM | |
if: ${{ inputs.py_release }} | |
uses: pdm-project/setup-pdm@v3 | |
with: | |
python-version: '3.12' | |
cache: true | |
cache-dependency-path: py/pdm.lock | |
- name: Update Python version | |
if: ${{ inputs.py_release }} | |
run: | | |
zetch put zetch.config.toml context.static.PY_VERSION.value ${{ inputs.py_version }} | |
# Js project | |
- name: Install Bun, no npm should be needed | |
if: ${{ inputs.js_release }} | |
uses: oven-sh/setup-bun@v1 | |
with: | |
bun-version: latest | |
- name: Install js dependencies | |
if: ${{ inputs.js_release }} | |
run: | | |
cd ./js | |
bun install | |
- name: Update JS version | |
if: ${{ inputs.js_release }} | |
run: | | |
zetch put zetch.config.toml context.static.JS_VERSION.value ${{ inputs.js_version }} | |
# Formatting and checking uses nightly rather than stable: | |
- uses: dtolnay/rust-toolchain@nightly | |
if: ${{ inputs.py_rust_release }} || ${{ inputs.rust_release }} | |
with: | |
components: rustfmt, clippy | |
- name: Install cargo-hack, used for feature checking in pre-commit. | |
if: ${{ inputs.py_rust_release }} || ${{ inputs.rust_release }} | |
uses: taiki-e/install-action@cargo-hack | |
- name: Update Rust-backed Python version | |
if: ${{ inputs.py_rust_release }} | |
run: | | |
zetch put zetch.config.toml context.static.PY_RUST_VERSION.value ${{ inputs.py_rust_version }} | |
- name: Update Rust version | |
if: ${{ inputs.rust_release }} | |
run: | | |
zetch put zetch.config.toml context.static.RUST_VERSION.value ${{ inputs.rust_version }} | |
- name: add and format added files with pre-commit | |
# Running on staged change only as that's all that's needed, || true as don't want it to fail, just modify | |
run: | | |
git add . && | |
./dev_scripts/test.sh pre_till_success && | |
git add . | |
- name: Commit the new version to the repo | |
uses: EndBug/add-and-commit@v9 | |
with: | |
push: true | |
message: 'chore: bump package versions for release' | |
author_name: github-actions | |
author_email: [email protected] | |
- name: get sha | |
id: sha | |
run: | | |
sha_new=$(git rev-parse HEAD) | |
echo $sha_new | |
echo "::set-output name=SHA::$sha_new" | |
- run: echo ${{ steps.sha.outputs.SHA }} | |
# Rebuild docs each time this is run, note there is currently no versioning in the docs for each of the individually packages, will need to be added when a public package is being properly released | |
docs: | |
name: Docs Release | |
needs: [commit_versions] | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.commit_versions.outputs.new-sha }} | |
- name: Set up PDM | |
uses: pdm-project/setup-pdm@v3 | |
with: | |
python-version: '3.12' | |
cache: true | |
cache-dependency-path: docs/pdm.lock | |
- name: Install dependencies | |
run: | | |
pdm sync -p ./docs | |
- name: Install Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version: '20' | |
- name: Install rust toolchain (doc builds use nightly features) | |
uses: dtolnay/rust-toolchain@nightly | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: ./rust -> target | |
cache-on-failure: 'true' | |
cache-all-crates: 'true' | |
- name: Build docs | |
run: | | |
./dev_scripts/docs.sh build | |
- name: Deploy to GitHub Pages | |
uses: crazy-max/ghaction-github-pages@v4 | |
with: | |
keep_history: true | |
target_branch: docs-site | |
build_dir: site | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
py_release: | |
name: Python Release | |
needs: [commit_versions] | |
# Run only if requested: | |
if: ${{ inputs.py_release }} | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.commit_versions.outputs.new-sha }} | |
- name: Set up PDM | |
uses: pdm-project/setup-pdm@v3 | |
with: | |
python-version: '3.12' | |
cache: true | |
cache-dependency-path: py/pdm.lock | |
- name: Publish package publicly to PyPI | |
run: | | |
export PDM_PUBLISH_USERNAME='__token__' | |
export PDM_PUBLISH_PASSWORD='${{ secrets.PYPI_TOKEN }}' | |
pdm publish -p ./py --repository pypi | |
- name: Publish the release notes | |
uses: release-drafter/release-drafter@v5 | |
with: | |
publish: true | |
tag: v${{ inputs.py_version }}_py | |
name: v${{ inputs.py_version }} - Python | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
js_release: | |
name: JS Release | |
needs: [commit_versions] | |
# Run only if requested: | |
if: ${{ inputs.js_release }} | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.commit_versions.outputs.new-sha }} | |
- name: Install Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version: '20' | |
- name: Install deps, build lib and copy package.json and README.md to dist which is published as | |
root | |
run: | | |
cd js | |
npm install | |
npm run build | |
cp package.json dist/ | |
cp README.md dist/ | |
- name: Publish publicly to NPM | |
run: | | |
cd js/dist | |
npm set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} | |
npm publish | |
- name: Publish the release notes | |
uses: release-drafter/release-drafter@v5 | |
with: | |
publish: true | |
tag: v${{ inputs.js_version }}_js | |
name: v${{ inputs.js_version }} - JS | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
py_rust_build: | |
needs: [commit_versions] | |
# Run only if requested: | |
if: ${{ inputs.py_rust_release }} | |
uses: ./.github/workflows/py-rust-build.yml | |
with: | |
new-sha: ${{ needs.commit_versions.outputs.new-sha }} | |
py_rust_release: | |
name: Rust-backed Python Library Release | |
# Make needs multiline: | |
needs: [commit_versions, py_rust_build] | |
# Run only if requested: | |
if: ${{ inputs.py_rust_release }} | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.commit_versions.outputs.new-sha }} | |
- name: get dist artifacts built in py_rust_build job | |
uses: actions/download-artifact@v3 | |
with: | |
name: py_rust_build_files | |
path: py_rust/dist | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.12' | |
- run: pip install twine | |
- name: Make sure release contents seem valid | |
run: twine check py_rust/dist/* | |
- name: upload to pypi | |
run: twine upload py_rust/dist/* | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} | |
- name: Publish the release notes | |
uses: release-drafter/release-drafter@v5 | |
with: | |
publish: true | |
tag: v${{ inputs.py_rust_version }}_py_rs | |
name: v${{ inputs.py_rust_version }} - Rust-backed Python Library | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
rs_release: | |
name: Rust Release | |
needs: [commit_versions] | |
# Run only if requested: | |
if: ${{ inputs.rust_release }} | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.commit_versions.outputs.new-sha }} | |
- name: Install rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
- name: upload to Crates.io | |
run: | | |
cd rust | |
cargo publish --token ${{ secrets.CRATES_TOKEN }} | |
- name: Publish the release notes | |
uses: release-drafter/release-drafter@v5 | |
with: | |
publish: true | |
tag: v${{ inputs.rust_version }}_rs | |
name: v${{ inputs.rust_version }} - Rust | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |