Test & deploy #3
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: Test & deploy | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
schedule: | |
- cron: "0 6,18 * * *" | |
release: | |
types: [released] | |
jobs: | |
test_repo: | |
name: Test on ${{ matrix.os }} w/ Py${{ matrix.python-version }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
python-version: ["3.8", "3.9", "3.10", "3.11"] | |
os: [ubuntu-20.04, macos-latest] | |
fail-fast: false | |
steps: | |
- name: Setup Python ${{ matrix.python-version }} env | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Ensure latest pip & wheel | |
run: "python -m pip install -q --upgrade pip wheel" | |
- name: Install dependencies | |
run: | | |
if [ "$RUNNER_OS" == "Linux" ]; then | |
sudo apt-get update && sudo apt-get install -yq \ | |
apt-transport-https \ | |
bison \ | |
build-essential \ | |
cmake \ | |
flex \ | |
libbz2-dev \ | |
ninja-build \ | |
software-properties-common | |
else | |
brew install cmake | |
fi | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Install from repo in test mode | |
run: "pip install -e '.[dev]'" | |
- name: Run tests | |
run: "python -m pytest -svx nle/tests --basetemp=nle_test_data" | |
- name: Compress test output dir | |
if: ${{ always() }} | |
run: | | |
tar -zcvf nle_test_ci_${{ github.sha }}.tar.gz nle_test_data | |
- name: Save test results | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v1 | |
with: | |
name: nle_test_data_${{ matrix.python-version }} | |
path: nle_test_ci_${{ github.sha }}.tar.gz | |
test_sdist: | |
name: Test sdist on MacOS w/ Py3.11 | |
needs: test_repo | |
runs-on: macos-latest | |
steps: | |
- name: Setup Python 3.11 env | |
uses: actions/setup-python@v2 | |
with: | |
python-version: 3.11 | |
- name: Ensure latest pip & wheel | |
run: "python -m pip install -q --upgrade pip wheel" | |
- name: Install dependencies | |
run: | | |
brew install cmake | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Generate sdist | |
run: | | |
NLE_RELEASE_BUILD=1 python setup.py sdist | |
- name: Install from sdist | |
run: | | |
SDISTNAME=$(ls dist/) | |
MODE="[all]" | |
pip install "dist/$SDISTNAME$MODE" | |
- name: Run tests outside repo dir | |
run: | | |
REPONAME=$(basename $PWD) | |
pushd .. | |
python -m pytest -svx $REPONAME/nle/tests --basetemp=$REPONAME/nle_test_data | |
popd | |
- name: Compress test output dir | |
if: ${{ always() }} | |
run: | | |
tar -zcvf nle_test_ci_${{ github.sha }}.tar.gz nle_test_data | |
- name: Save test results | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v1 | |
with: | |
name: nle_test_data_sdist | |
path: nle_test_ci_${{ github.sha }}.tar.gz | |
- name: Save sdist | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v1 | |
with: | |
name: nle_dist | |
path: dist/ | |
# TODO move this to separate workflow whenever github decides to provide basic | |
# functionalities like workflow dependencies :| | |
deploy_sdist: | |
name: Deploy sdist to pypi | |
needs: test_sdist | |
if: github.event_name == 'release' && github.event.action == 'released' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Check version matches release tag | |
run: | | |
echo "v$(cat version.txt)" | |
echo "${{ github.event.release.tag_name }}" | |
[[ "${{ github.event.release.tag_name }}" == "v$(cat version.txt)" ]] | |
- name: Get dist artifacts from test_sdist | |
uses: actions/download-artifact@v2 | |
with: | |
name: nle_dist | |
path: dist | |
- name: Install from sdist | |
run: | | |
pwd | |
ls -R | |
ls -al . | |
ls -R dist/ | |
ls -al dist/ | |
# NOTE: we assume that dist/ contains a built sdist (and only that). | |
# Yes, we could be more defensively, but What Could Go Wrong?™ | |
- name: Publish package to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_TOKEN }} |