name: modified_scripts on: [pull_request] jobs: discover_modified_scripts: runs-on: ubuntu-latest outputs: versions: ${{steps.modified-versions.outputs.versions}} steps: - uses: actions/checkout@v2 - run: git fetch origin "$GITHUB_BASE_REF" - shell: bash run: > versions=$(git diff "origin/$GITHUB_BASE_REF" --name-only -z | perl -ne 'BEGIN {$\="\n";$/="\0";} chomp; if (/^plugins\/python-build\/share\/python-build\/(?:([^\/]+)|patches\/([^\/]+)\/.*)$/ and -e $& ) { print $1.$2; }' \ | sort -u); echo -e "versions<> $GITHUB_ENV - id: modified-versions run: | echo -n "::set-output name=versions::" echo "${{ env.versions }}" | jq -R . | jq -sc . macos_build: needs: discover_modified_scripts if: needs.discover_modified_scripts.outputs.versions != '[""]' strategy: fail-fast: false matrix: python-version: ${{fromJson(needs.discover_modified_scripts.outputs.versions)}} os: ["macos-10.15", "macos-11"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - run: | brew install openssl openssl@1.1 readline sqlite3 xz zlib - run: | export PYENV_ROOT="$GITHUB_WORKSPACE" echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH - run: | pyenv install -v ${{ matrix.python-version }} pyenv global ${{ matrix.python-version }} # Micropython doesn't support --version - run: > if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then python -c 'import sys; print(sys.version)' else python --version; python -m pip --version fi # Micropython doesn't support sys.executable, os.path, older versions even os - env: EXPECTED_PYTHON: ${{ matrix.python-version }} run: | if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then [[ $(pyenv which python) == "${{ env.PYENV_ROOT }}/versions/${{ matrix.python-version }}/bin/python" ]] || exit 1 python -c 'import sys; assert sys.implementation.name == "micropython"' else python -c 'if True: import os, sys, os.path correct_dir = os.path.join( os.environ["PYENV_ROOT"], "versions", os.environ["EXPECTED_PYTHON"], "bin") assert os.path.dirname(sys.executable) == correct_dir' fi # bundled executables in some Anaconda releases cause the post-run step to hang in MacOS - run: | pyenv global system rm -f "$(pyenv root)"/shims/* ubuntu_build: needs: discover_modified_scripts if: needs.discover_modified_scripts.outputs.versions != '[""]' strategy: fail-fast: false matrix: python-version: ${{fromJson(needs.discover_modified_scripts.outputs.versions)}} os: ["ubuntu-18.04", "ubuntu-20.04"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - run: | sudo apt-get update -q; sudo apt-get install -yq build-essential \ libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev python-openssl git - run: | export PYENV_ROOT="$GITHUB_WORKSPACE" echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH - run: | pyenv install -v ${{ matrix.python-version }} pyenv global ${{ matrix.python-version }} # Micropython doesn't support --version - run: > if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then python -c 'import sys; print(sys.version)' else python --version; python -m pip --version fi # Micropython doesn't support sys.executable, os.path, older versions even os - env: EXPECTED_PYTHON: ${{ matrix.python-version }} run: | if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then [[ $(pyenv which python) == "${{ env.PYENV_ROOT }}/versions/${{ matrix.python-version }}/bin/python" ]] || exit 1 python -c 'import sys; assert sys.implementation.name == "micropython"' else python -c 'if True: import os, sys, os.path correct_dir = os.path.join( os.environ["PYENV_ROOT"], "versions", os.environ["EXPECTED_PYTHON"], "bin") assert os.path.dirname(sys.executable) == correct_dir' fi