Skip to content

Add setuptools_scm for pyproject.toml, setup.cfg and setup.py #23

Add setuptools_scm for pyproject.toml, setup.cfg and setup.py

Add setuptools_scm for pyproject.toml, setup.cfg and setup.py #23

# documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions
name: Test version for tarball without git metadata
on: [push, pull_request, workflow_dispatch]
permissions: read-all
jobs:
test_versioning_from_tarball:
# ubuntu <= 20.04 is required for python 3.6
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
python-version: ['3.6', '3.7', '3.8', '3.9', '3.10', '3.11']
steps:
# - name: Check out repository
# uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
# with:
# persist-credentials: false
# fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
with:
python-version: ${{ matrix.python-version }}
- name: Install setuptools
run: |
if [[ "${{ matrix.python-version }}" == "3.6" ]]; then
# system installed setuptools version in RHEL8 and CO7
python -m pip install --user setuptools==39.2.0
fi
- name: Install setuptools_scm
run: |
if [[ "${{ matrix.python-version }}" == "3.6" ]]; then
python -m pip install --user 'setuptools_scm>=4.0.0,<=4.1.2'
else
python -m pip install --user setuptools_scm
fi
- name: Check python and setuptools versions
run: |
python --version
python -m pip --version
python -c 'import setuptools; print("setuptools", setuptools.__version__)'
python -m pip show setuptools_scm | grep Version
- name: Download and extract tarball for current commit
run: |
wget "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/archive/$GITHUB_SHA.tar.gz"
tar -xzf "$GITHUB_SHA.tar.gz"
# Check current directory contents
find .
- name: Check version when running against uninstalled git clone
run: |
echo "importing eessi.testsuite from:"
original_pythonpath=$PYTHONPATH
export PYTHONPATH="$PWD/test-suite-$GITHUB_SHA:$PYTHONPATH"
echo "PYTHONPATH: $PYTHONPATH"
python3 -c "import eessi.testsuite; print(eessi.testsuite.__file__)"
uninstalled_version=$(python3 -c "import eessi.testsuite; print(eessi.testsuite.__version__)")
echo "Version from uninstalled git clone: $uninstalled_version"
fallback_version=$(grep -oP 'fallback_version\s*=\s*"\K[^"]+' "test-suite-$GITHUB_SHA/pyproject.toml")
echo "Testing if this version is the fallback version from pyproject.toml ..."
if [[ "$uninstalled_version" != "$fallback_version" ]]; then
echo "Version $uninstalled_version not equal to $fallback_version"
exit 1
else
echo "... yes!"
fi
export PYTHONPATH="$original_pythonpath"
- name: Install from extracted tarball
run: |
# Make sure we get the fallback version from the pyprject.toml before changing workdir
fallback_version=$(grep -oP 'fallback_version\s*=\s*"\K[^"]+' "test-suite-$GITHUB_SHA/pyproject.toml")
# Make it easier to figure out CI issues in case of CI failures related to SCM versioning
export SETUPTOOLS_SCM_DEBUG=1
# Change dir to the extracted tarball
cd "test-suite-$GITHUB_SHA"
python -m pip install . --user
echo "Checking contents of .local"
find $HOME/.local
# make sure we are not in the source directory
cd $HOME
echo "Checking if file 'eessi/testsuite/_version.py' was generated by setuptools_scm":
cat $HOME/.local/lib/python${{ matrix.python-version}}/site-packages/eessi/testsuite/_version.py
echo "Checking if version can be imported directly from the version file"
if [[ "${{ matrix.python-version }}" == "3.6" ]]; then
versionfile_version=$(python -c 'from eessi.testsuite._version import version; print(version)')
else
versionfile_version=$(python -c 'from eessi.testsuite._version import __version__; print(__version__)')
fi
echo "Version from version file: $versionfile_version"
echo "Checking if we can import the __version__ from eessi.testsuite"
installed_version=$(python -c 'import eessi.testsuite; print(eessi.testsuite.__version__)')
echo "Version from installed testsuite: $installed_version"
# Read the fallback version from the pyproject.toml
echo "Testing if this is the fallback version from pyproject.toml ..."
if [[ "$installed_version" != "$fallback_version" ]]; then
echo "Version $installed_version not equal to $fallback_version"
exit 1
else
echo "... yes!"
fi
echo "Checking if the version imported from eessi.testsuite matches that from the version file ..."
if [[ "$versionfile_version" != "$installed_version" ]]; then
echo "Version $versionfile_version not equal to $installed_version"
exit 1
else
echo "... yes!"
fi