MyoSuite PyPI Release #45
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
# adapted from | |
# - https://medium.com/@VersuS_/automate-pypi-releases-with-github-actions-4c5a9cfe947d | |
# - https://github.com/facebookresearch/fairscale/blob/main/.github/workflows/release.yml | |
name: MyoSuite PyPI Release | |
# on: [push] | |
# on: | |
# push: | |
# tags: | |
# - '*' | |
on: | |
workflow_dispatch: | |
inputs: | |
name: | |
description: 'Release Type (major, minor, patch)' | |
default: 'patch' | |
required: true | |
# # Upon running the following instructions | |
# # > git tag 0.0.1 # or whatever version you want | |
# # > git push origin --tags | |
# # The following operations will be run | |
# # 1. Update version according to major | minor | patch and use the new version as `tag name` | |
# # 2. Use the `tag name` as `release version` | |
# # 3. Build the PyPI package by using /myosuite/__init__.py version | |
# # 4. Upload the package | |
# # 5. Test Upload | |
jobs: | |
# 1. Update version according to major | minor | patch and use the new version as `tag name` | |
get_next_version: | |
runs-on: ubuntu-latest | |
steps: | |
- name: checkout-repo-content | |
uses: actions/checkout@v3 | |
- name: setup-python | |
uses: actions/setup-python@v2 | |
with: | |
python-version: 3.9 | |
- name: get next version and tag | |
id: get-next-version-and-tag | |
run: | | |
output=$(python3 .github/release_utils.py --release-type ${{ github.event.inputs.name }}) | |
echo $output | |
new_version=$(echo $output | awk '{print $1}') | |
new_tag=$(echo $output | awk '{print $2}') | |
echo "new version is $new_version" | |
echo "new tag is $new_tag" | |
echo ::set-output name=version::$new_version | |
echo ::set-output name=tag::$new_tag | |
outputs: | |
new_version: ${{ steps.get-next-version-and-tag.outputs.version }} | |
new_tag: ${{ steps.get-next-version-and-tag.outputs.tag }} | |
pypi_package_build_and_release: | |
name: Build and publish PyPI wheel | |
runs-on: ubuntu-latest | |
needs: get_next_version | |
steps: | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Set up Python 3.9 | |
uses: actions/setup-python@v3 | |
with: | |
python-version: '3.9' | |
- name: Install pypa/setuptools | |
run: >- | |
python -m | |
pip install wheel | |
# update the version number in version.py | |
- name: update version | |
id: update-version | |
run : | | |
echo "current folder = $PWD" | |
echo "current branch = $(git branch --show-current)" | |
output=$(python3 .github/release_utils.py --release-type ${{ github.event.inputs.name }} --update-version) | |
# 2. Use the `tag name` as `release version` | |
# add and commit the updated version.py to main | |
- name: add and commit to main | |
uses: EndBug/add-and-commit@v7.5.0 | |
with: | |
# token: ${{ secrets.REPO_TOKEN }} | |
author_name: ${{ secrets.AUTHOR_NAME }} | |
author_email: ${{ secrets.AUTHOR_EMAIL }} | |
branch: main | |
default_author: github_actor | |
message: '${{ needs.get_next_version.outputs.new_version }} release' | |
pathspec_error_handling: exitAtEnd | |
# Arguments for the git pull command. Use NO-PULL to avoid the action pulling at all. | |
# Default: '--no-rebase' | |
pull: 'NO-PULL' | |
tag: '${{ needs.get_next_version.outputs.new_tag }}' | |
# 3. Build the PyPI packeage | |
- name: Build a binary wheel | |
run: >- | |
python setup.py sdist bdist_wheel | |
# 4. Upload the package | |
- name: Publish distribution to PyPI | |
uses: pypa/gh-action-pypi-publish@master | |
with: | |
password: ${{ secrets.PYPI_API_TOKEN }} | |
# - name: Publish distribution to TestPyPI | |
# uses: pypa/gh-action-pypi-publish@release/v1 | |
# with: | |
# password: ${{ secrets.TEST_PYPI_API_TOKEN }} | |
# repository-url: https://test.pypi.org/legacy/ | |
test_latest_PyPI: | |
needs: pypi_package_build_and_release | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: | |
- ubuntu-latest | |
- macos-latest | |
- windows-latest | |
steps: | |
- name: Set up Python 3.9 | |
uses: actions/setup-python@v3 | |
with: | |
python-version: "3.9" | |
- name: Prepare Linux | |
if: ${{ runner.os == 'Linux' }} | |
run: > | |
sudo apt-get install -y \ | |
libgl1-mesa-dev \ | |
libgl1-mesa-glx \ | |
libglew-dev \ | |
libosmesa6-dev \ | |
software-properties-common | |
sudo apt-get install -y patchelf | |
- shell: bash | |
run: | | |
echo "Test MyoSuite PyPI wheel" | |
pip install -U myosuite | |
python -m myosuite.tests.test_myo |