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@v4 - 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); EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64); echo "versions<<$EOF" >> $GITHUB_ENV; echo "$versions" >> $GITHUB_ENV; echo "$EOF" >> $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-13", "macos-14"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - run: | #envvars export PYENV_ROOT="$GITHUB_WORKSPACE" echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH - run: | #prerequisites brew install openssl openssl@1.1 readline sqlite3 xz zlib if [[ "${{ matrix.python-version }}" =~ pypy.*-(src|dev) ]]; then export PYENV_BOOTSTRAP_VERSION=pypy2.7-7 echo "PYENV_BOOTSTRAP_VERSION=$PYENV_BOOTSTRAP_VERSION" >> $GITHUB_ENV pyenv install $PYENV_BOOTSTRAP_VERSION fi - run: | #build pyenv --debug install ${{ matrix.python-version }} pyenv global ${{ matrix.python-version }} # Micropython doesn't support --version - run: | #print version 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: | #check 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-20.04", "ubuntu-22.04"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - run: | #envvars export PYENV_ROOT="$GITHUB_WORKSPACE" echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH - run: | #prerequisites sudo apt-get update -q; sudo apt-get install -yq make build-essential \ libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev if [[ "${{ matrix.python-version }}" =~ pypy.*-(src|dev) ]]; then export PYENV_BOOTSTRAP_VERSION=pypy2.7-7 echo "PYENV_BOOTSTRAP_VERSION=$PYENV_BOOTSTRAP_VERSION" >> $GITHUB_ENV pyenv install $PYENV_BOOTSTRAP_VERSION fi - run: | #build pyenv install -v ${{ matrix.python-version }} pyenv global ${{ matrix.python-version }} # Micropython doesn't support --version - run: | #print version 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: | #check 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