
Now that ubuntu-24 is out of beta at Github Since for ubuntu_build, we only use one OS version and the changes between versions are not as drastic as with MacOS, it seems safe to have it upgrade automatically.
270 lines
11 KiB
YAML
270 lines
11 KiB
YAML
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;
|
|
|
|
versions_cpython_only=$(grep -Ee '^[[:digit:]]' <<<"$version")
|
|
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64);
|
|
echo "versions_cpython_only<<$EOF" >> $GITHUB_ENV;
|
|
echo $versions_cpython_only >> $GITHUB_ENV;
|
|
echo "$EOF" >> $GITHUB_ENV;
|
|
- id: modified-versions
|
|
run: |
|
|
echo "versions=`echo "${{ env.versions }}" | jq -R . | jq -sc .`" >> $GITHUB_OUTPUT
|
|
echo "versions_cpython_only=`echo "${{ env.versions_cpython_only }}" | jq -R . | jq -sc .`" >> $GITHUB_OUTPUT
|
|
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/*
|
|
|
|
macos_build_bundled_dependencies:
|
|
needs: discover_modified_scripts
|
|
if: needs.discover_modified_scripts.outputs.versions_cpython_only != '[""]'
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ${{fromJson(needs.discover_modified_scripts.outputs.versions_cpython_only)}}
|
|
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 sqlite3 xz zlib
|
|
"$GITHUB_WORKSPACE/.github/workflows/scripts/brew-uninstall-cascade.sh" openssl@3 openssl@1.1 readline
|
|
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", "ubuntu-24.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
|
|
ubuntu_build_tar_gz:
|
|
needs: discover_modified_scripts
|
|
if: needs.discover_modified_scripts.outputs.versions_cpython_only != '[""]'
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ${{fromJson(needs.discover_modified_scripts.outputs.versions_cpython_only)}}
|
|
os: ["ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.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
|
|
echo "_PYTHON_BUILD_FORCE_SKIP_XZ=1" >> $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
|