CI: we decide the pyln-testing version to be installed #2390
Workflow file for this run
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: Integration Tests (latest) | |
# Cancel duplicate jobs | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
on: | |
push: | |
branches: [ master ] | |
pull_request: | |
jobs: | |
build-and-test: | |
name: Test CLN=${{ matrix.cln-version }}, PY=${{ matrix.python-version }}, BCD=${{ matrix.bitcoind-version }}, EXP=${{ matrix.experimental }}, DEP=${{ matrix.deprecated }} | |
runs-on: ubuntu-latest | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.8", "3.11"] | |
bitcoind-version: ["27.1"] | |
cln-version: ["24.11", "24.08.2", "24.05"] | |
experimental: [1] | |
deprecated: [0] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Get changed files | |
id: get_changed_files | |
if: ${{ github.event_name == 'pull_request' }} | |
uses: tj-actions/changed-files@v44 | |
with: | |
files: '**/*' | |
files_ignore: | | |
*.md | |
*.toml | |
*.yml | |
*.lock | |
Dockerfile | |
.gitignore | |
LICENSE | |
archived/** | |
- name: Set plugin_dirs | |
id: set_plugin_dirs | |
if: ${{ github.event_name == 'pull_request' }} | |
run: | | |
changed_files=$(echo "${{ steps.get_changed_files.outputs.all_changed_files }}" | tr ',' '\n') | |
plugin_dirs="" | |
for file in $changed_files; do | |
dir=$(dirname "$file" | cut -d'/' -f1) | |
if [[ "$dir" != "." && "${dir:0:1}" != "." && ! " ${plugin_dirs[@]} " =~ " ${dir} " ]]; then | |
plugin_dirs="${plugin_dirs} ${dir}" | |
fi | |
done | |
echo "plugin_dirs=${plugin_dirs}" >> "$GITHUB_OUTPUT" | |
if [[ -n "${{ steps.get_changed_files.outputs.all_changed_files }}" ]]; then | |
echo "run_ci=true" >> "$GITHUB_OUTPUT" | |
else | |
echo "run_ci=false" >> "$GITHUB_OUTPUT" | |
fi | |
- name: Set up Python ${{ matrix.python-version }} | |
if: ${{ github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true' }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Extract exact python and os version | |
id: exact_versions | |
run: | | |
PYTHON_VERSION=$(python --version 2>&1 | grep -oP '(?<=Python )\d+\.\d+(\.\d+)?') | |
echo "Python version: $PYTHON_VERSION" | |
echo "python_version=$PYTHON_VERSION" >> "$GITHUB_OUTPUT" | |
OS_VERSION=$(lsb_release -rs) | |
echo "OS version: $OS_VERSION" | |
echo "os_version=$OS_VERSION" >> $GITHUB_OUTPUT | |
- name: Create cache paths | |
if: ${{ github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true' }} | |
run: | | |
sudo mkdir /usr/local/libexec | |
sudo mkdir /usr/local/libexec/c-lightning | |
sudo mkdir /usr/local/libexec/c-lightning/plugins | |
sudo chown -R $USER /usr/local/libexec | |
- name: Restore bitcoind cache | |
id: cache-bitcoind | |
if: ${{ github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true' }} | |
uses: actions/cache@v4 | |
with: | |
path: /usr/local/bin/bitcoin* | |
key: cache-bitcoind-${{ matrix.bitcoind-version }}-${{ steps.exact_versions.outputs.os_version }} | |
- name: Download Bitcoin ${{ matrix.bitcoind-version }} & install binaries | |
if: ${{ steps.cache-bitcoind.outputs.cache-hit != 'true' && (github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true') }} | |
run: | | |
export BITCOIND_VERSION=${{ matrix.bitcoind-version }} | |
wget https://bitcoincore.org/bin/bitcoin-core-${BITCOIND_VERSION}/bitcoin-${BITCOIND_VERSION}-x86_64-linux-gnu.tar.gz | |
tar -xzf bitcoin-${BITCOIND_VERSION}-x86_64-linux-gnu.tar.gz | |
sudo mv bitcoin-${BITCOIND_VERSION}/bin/* /usr/local/bin | |
rm -rf bitcoin-${BITCOIND_VERSION}-x86_64-linux-gnu.tar.gz bitcoin-${BITCOIND_VERSION} | |
- name: Save bitcoind cache | |
uses: actions/cache/save@v4 | |
if: ${{ steps.cache-bitcoind.outputs.cache-hit != 'true' && github.event_name == 'push' }} | |
with: | |
path: /usr/local/bin/bitcoin* | |
key: cache-bitcoind-${{ matrix.bitcoind-version }}-${{ steps.exact_versions.outputs.os_version }} | |
- name: Restore CLN cache | |
id: cache-cln | |
if: ${{ github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true' }} | |
uses: actions/cache@v4 | |
with: | |
path: | | |
/usr/local/bin/lightning* | |
/usr/local/libexec/c-lightning | |
./lightning | |
key: cache-cln-${{ matrix.cln-version }}-${{ steps.exact_versions.outputs.os_version }} | |
- name: Download Core Lightning ${{ matrix.cln-version }} & install binaries | |
if: ${{ steps.cache-cln.outputs.cache-hit != 'true' && (github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true') }} | |
id: cln-install | |
run: | | |
url=$(curl -s https://api.github.com/repos/ElementsProject/lightning/releases/tags/v${{ matrix.cln-version }} \ | |
| jq '.assets[] | select(.name | contains("22.04")) | .browser_download_url' \ | |
| tr -d '\"') | |
wget $url | |
sudo tar -xvf ${url##*/} -C /usr/local --strip-components=2 | |
- name: Checkout Core Lightning ${{ matrix.cln-version }} | |
if: ${{ steps.cache-cln.outputs.cache-hit != 'true' && (github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true') }} | |
uses: actions/checkout@v4 | |
with: | |
repository: 'ElementsProject/lightning' | |
path: 'lightning' | |
ref: 'v${{ matrix.cln-version }}' | |
fetch-depth: 0 # Fetch all history for all branches and tags | |
submodules: 'recursive' | |
- name: Save CLN cache | |
uses: actions/cache/save@v4 | |
if: ${{ steps.cache-cln.outputs.cache-hit != 'true' && github.event_name == 'push' }} | |
with: | |
path: | | |
/usr/local/bin/lightning* | |
/usr/local/libexec/c-lightning | |
./lightning | |
key: cache-cln-${{ matrix.cln-version }}-${{ steps.exact_versions.outputs.os_version }} | |
- name: Restore python dependencies cache | |
id: cache-python-deps | |
if: ${{ github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true' }} | |
uses: actions/cache@v4 | |
with: | |
path: ~/.local/lib/python${{ matrix.python-version }}/site-packages | |
key: cache-python-deps-${{ steps.exact_versions.outputs.python_version }}-${{ matrix.cln-version }}-${{ steps.exact_versions.outputs.os_version }} | |
- name: Install Core Lightning Python package dependencies | |
if: ${{ steps.cache-python-deps.outputs.cache-hit != 'true' && (github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true') }} | |
run: | | |
cd lightning | |
pip3 install --user -U \ | |
pip \ | |
poetry \ | |
wheel \ | |
blinker \ | |
pytest-custom-exit-code==0.3.0 \ | |
pytest-json-report | |
poetry install | |
poetry update | |
poetry export --without-hashes -f requirements.txt --output requirements.txt | |
pip install --user -U -r requirements.txt | |
pip install --user contrib/pyln-client contrib/pyln-testing flaky | |
pip3 install --upgrade pip | |
pip3 install --user -U virtualenv pip > /dev/null | |
- name: Save python dependencies cache | |
uses: actions/cache/save@v4 | |
if: ${{ steps.cache-python-deps.outputs.cache-hit != 'true' && github.event_name == 'push' }} | |
with: | |
path: ~/.local/lib/python${{ matrix.python-version }}/site-packages | |
key: cache-python-deps-${{ steps.exact_versions.outputs.python_version }}-${{ matrix.cln-version }}-${{ steps.exact_versions.outputs.os_version }} | |
- name: Run pytest tests | |
id: pytest_tests | |
if: ${{ github.event_name == 'push' || steps.set_plugin_dirs.outputs.run_ci == 'true' }} | |
run: | | |
export CLN_PATH=${{ github.workspace }}/lightning | |
export COMPAT=${{ matrix.deprecated }} | |
export EXPERIMENTAL_FEATURES=${{ matrix.experimental }} | |
export SLOW_MACHINE=1 | |
export TEST_DEBUG=1 | |
export TRAVIS=1 | |
export VALGRIND=0 | |
if [[ "${{ github.event_name }}" == 'pull_request' ]]; then | |
plugin_dirs="${{ steps.set_plugin_dirs.outputs.plugin_dirs }}" | |
else | |
plugin_dirs="" | |
fi | |
# Run the tests: In the case of a 'pull_request' event only the plugins in `plugin_dirs` | |
# are going to be tested; otherwise ('push' event) we test all plugins. | |
update_badges='' | |
if [[ "${{ github.event_name }}" == 'push' && "${{ github.ref }}" == 'refs/heads/master' ]] || [[ "${{ github.event_name }}" == 'schedule' ]] | |
then | |
update_badges='--update-badges' | |
fi | |
if [[ -z "$plugin_dirs" ]]; then | |
# Test all plugins if no specific plugins were changed | |
python3 .ci/test.py ${{ matrix.cln-version }} ${{ matrix.python-version }} $update_badges | |
else | |
python3 .ci/test.py ${{ matrix.cln-version }} ${{ matrix.python-version }} $update_badges $(echo "$plugin_dirs") | |
fi | |
gather: | |
# A dummy task that depends on the full matrix of tests, and signals completion. | |
name: CI completion | |
runs-on: ubuntu-latest | |
if: ${{ always() && github.event_name == 'push' }} | |
needs: | |
- build-and-test | |
strategy: | |
fail-fast: false | |
matrix: | |
cln-version: ["24.11", "24.08.2", "24.05"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
- name: Complete | |
run: | | |
python_versions='3.8 3.11' | |
echo "Updating badges data for ${{ matrix.cln-version }} workflow..." | |
python3 .ci/update_badges.py ${{ matrix.cln-version }} $(echo "$python_versions") | |
echo "CI completed." |