Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci(refactor): Fix workflows and small improvements #9793

Merged
merged 10 commits into from
Jun 7, 2024
17 changes: 15 additions & 2 deletions .github/workflows/build_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,24 @@ jobs:

echo "enabled=$enabled" >> $GITHUB_OUTPUT

- name: Checkout Repository
uses: actions/checkout@v4
- name: Checkout user repository
if: ${{ steps.check-build.outputs.enabled == 'true' }}
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
sparse-checkout-cone-mode: false
sparse-checkout: |
/*
!.github

# To avoid giving unknown scripts elevated permissions, download them from the master branch
- name: Get CI scripts from master
if: ${{ steps.check-build.outputs.enabled == 'true' }}
run: |
mkdir -p .github
cd .github
curl https://codeload.github.com/${{ github.repository }}/tar.gz/master | tar -xz --strip=2 arduino-esp32-master/.github

- name: Get libs cache
uses: actions/cache@v4
Expand Down
28 changes: 21 additions & 7 deletions .github/workflows/hw.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,32 @@ jobs:

echo "enabled=$enabled" >> $GITHUB_OUTPUT

- name: Checkout repository
- name: Checkout user repository
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
sparse-checkout-cone-mode: false
sparse-checkout: |
/*
!.github

- uses: actions/setup-python@v5
if: steps.check-tests.outputs.enabled == 'true'
with:
cache-dependency-path: tests/requirements.txt
cache: 'pip'
python-version: '3.10.1'
# To avoid giving unknown scripts elevated permissions, download them from the master branch
- name: Get CI scripts from master
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
run: |
mkdir -p .github
cd .github
curl https://codeload.github.com/${{ github.repository }}/tar.gz/master | tar -xz --strip=2 arduino-esp32-master/.github

# setup-python currently only works on ubuntu images
# - uses: actions/setup-python@v5
# if: ${{ steps.check-tests.outputs.enabled == 'true' }}
# with:
# cache-dependency-path: tests/requirements.txt
# cache: 'pip'
# python-version: '3.10.1'

- name: Install dependencies
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ jobs:
- name: Set up Python 3
uses: actions/setup-python@v5
with:
cache-dependency-path: tools/pre-commit/requirements.txt
cache: 'pip'
python-version: "3.x"

- name: Get Python version hash
Expand All @@ -41,11 +43,10 @@ jobs:
with:
path: |
~/.cache/pre-commit
~/.cache/pip
key: pre-commit|${{ env.PY_HASH }}|${{ hashFiles('.pre-commit-config.yaml', '.github/workflows/pre-commit.yml') }}
key: pre-commit-${{ env.PY_HASH }}-${{ hashFiles('.pre-commit-config.yaml', '.github/workflows/pre-commit.yml', 'tools/pre-commit/requirements.txt') }}

- name: Install python dependencies
run: python -m pip install pre-commit docutils
run: python -m pip install -r tools/pre-commit/requirements.txt

- name: Get changed files
id: changed-files
Expand All @@ -61,7 +62,6 @@ jobs:
with:
path: |
~/.cache/pre-commit
~/.cache/pip
key: ${{ steps.restore-cache.outputs.cache-primary-key }}

- name: Push changes using pre-commit-ci-lite
Expand Down
8 changes: 7 additions & 1 deletion .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ jobs:
runs-on: ubuntu-latest
outputs:
build_all: ${{ steps.set-chunks.outputs.build_all }}
build_libraries: ${{ steps.set-chunks.outputs.build_libraries }}
build_static_sketches: ${{ steps.set-chunks.outputs.build_static_sketches }}
build_idf: ${{ steps.set-chunks.outputs.build_idf }}
build_platformio: ${{ steps.set-chunks.outputs.build_platformio }}
Expand Down Expand Up @@ -103,6 +104,7 @@ jobs:

build_platformio=${{ steps.changed-files.outputs.platformio_any_changed == 'true' }}
build_idf=${{ steps.changed-files.outputs.idf_any_changed == 'true' }}
build_libraries=${{ steps.changed-files.outputs.libraries_any_changed == 'true' }}
build_static_sketches=${{ steps.changed-files.outputs.static_sketeches_any_changed == 'true' }}

core_changed=${{ steps.changed-files.outputs.core_any_changed == 'true' }}
Expand Down Expand Up @@ -164,6 +166,7 @@ jobs:
chunks+="]"

echo "build_all=$build_all" >> $GITHUB_OUTPUT
echo "build_libraries=$build_libraries" >> $GITHUB_OUTPUT
echo "build_static_sketches=$build_static_sketches" >> $GITHUB_OUTPUT
echo "build_idf=$build_idf" >> $GITHUB_OUTPUT
echo "build_platformio=$build_platformio" >> $GITHUB_OUTPUT
Expand Down Expand Up @@ -274,7 +277,10 @@ jobs:
build-esp-idf-component:
name: Build with ESP-IDF ${{ matrix.idf_ver }} for ${{ matrix.idf_target }}
needs: gen-chunks
if: ${{ needs.gen-chunks.outputs.build_all == 'true' || needs.gen-chunks.outputs.build_idf == 'true' }}
if: |
needs.gen-chunks.outputs.build_all == 'true' ||
needs.gen-chunks.outputs.build_libraries == 'true' ||
needs.gen-chunks.outputs.build_idf == 'true'
runs-on: ubuntu-20.04
strategy:
fail-fast: false
Expand Down
33 changes: 23 additions & 10 deletions .github/workflows/qemu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,35 +45,48 @@ jobs:

echo "enabled=$enabled" >> $GITHUB_OUTPUT

- name: Checkout repository
- name: Checkout user repository
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
uses: actions/checkout@v4
if: steps.check-tests.outputs.enabled == 'true'
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
sparse-checkout-cone-mode: false
sparse-checkout: |
/*
!.github

# To avoid giving unknown scripts elevated permissions, download them from the master branch
- name: Get CI scripts from master
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
run: |
mkdir -p .github
cd .github
curl https://codeload.github.com/${{ github.repository }}/tar.gz/master | tar -xz --strip=2 arduino-esp32-master/.github

- uses: actions/setup-python@v5
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
with:
cache-dependency-path: tests/requirements.txt
cache: 'pip'
python-version: '3.x'

- name: Install Python dependencies
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
run: |
pip install -U pip
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi

- name: Install APT dependencies
uses: awalsh128/cache-apt-pkgs-action@v1.4.2
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
with:
packages: libpixman-1-0 libnuma1 libglib2.0-0 libslirp0 libsdl2-2.0-0
version: 1.0

- name: Get QEMU version
uses: pozetroninc/github-action-get-latest-release@v0.7.0
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
id: get-qemu-version
with:
token: ${{secrets.GITHUB_TOKEN}}
Expand All @@ -84,14 +97,14 @@ jobs:
- name: Cache QEMU
id: cache-qemu
uses: actions/cache@v4
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
with:
path: |
~/qemu
key: qemu-${{ steps.get-qemu-version.outputs.release }}-${{ hashFiles('.github/workflows/qemu.yml') }}

- name: Download QEMU
if: steps.cache-qemu.outputs.cache-hit != 'true' && steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.cache-qemu.outputs.cache-hit != 'true' && steps.check-tests.outputs.enabled == 'true' }}
run: |
cd ${{ env.QEMU_INSTALL_PATH }}
underscore_release=$(echo ${{ steps.get-qemu-version.outputs.release }} | sed 's/\-/_/g')
Expand All @@ -103,7 +116,7 @@ jobs:
echo "QEMU_PATH=${{ env.QEMU_INSTALL_PATH }}/qemu" >> $GITHUB_ENV

- name: Get binaries
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
id: cache-build-binaries
uses: actions/cache/restore@v4
with:
Expand All @@ -115,7 +128,7 @@ jobs:
~/.arduino/tests/**/build*.tmp/*.json

- name: Run Tests
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
run: QEMU_PATH="${{ env.QEMU_INSTALL_PATH }}" bash .github/scripts/tests_run.sh -c -type ${{inputs.type}} -t ${{inputs.chip}} -i 0 -m 1 -Q

- name: Upload ${{ inputs.chip }} ${{ inputs.type }} QEMU results as cache
Expand Down
15 changes: 6 additions & 9 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,6 @@ on:
- '!libraries/**.txt'
- '!libraries/**.properties'
- 'package/**'
- '.github/workflows/tests.yml'
- '.github/workflows/build_tests.yml'
- '.github/workflows/hw.yml'
- '.github/workflows/wokwi.yml'
- '.github/workflows/qemu.yml'
- '.github/scripts/install-*.sh'
- '.github/scripts/tests_*.sh'
- '.github/scripts/sketch_utils.sh'
schedule:
- cron: '0 2 * * *'

Expand Down Expand Up @@ -167,7 +159,7 @@ jobs:
clean:
name: Clean objects
needs: unit-test-results
if: always() && ${{ github.event_name }} == 'pull_request_target' && ${{ github.event.action }} != 'closed'
if: always()
permissions:
actions: write
runs-on: ubuntu-latest
Expand All @@ -179,6 +171,11 @@ jobs:
const ref = '${{ github.event.pull_request.number || github.ref }}';
const key_prefix = 'tests-' + ref + '-';

if ('${{ github.event_name }}' == 'pull_request_target' && '${{ github.event.action }}' != 'closed') {
console.log('Skipping cache cleanup for open PR');
return;
}

await github.paginate(github.rest.actions.getActionsCacheList, {
owner: context.repo.owner,
repo: context.repo.repo,
Expand Down
65 changes: 38 additions & 27 deletions .github/workflows/wokwi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,15 @@ jobs:
id: ${{ github.event.pull_request.number || github.ref }}-${{ github.event.pull_request.head.sha || github.sha }}-${{ inputs.chip }}-${{ inputs.type }}
runs-on: ubuntu-latest
steps:
# Disabled as Wokwi infrastrucutre is not stable (so we can re-trigger the tests manually)
# - name: Check if already run
# if: ${{ github.event.pull_request.number != null }}
# id: get-cache-results
# uses: actions/cache/restore@v4
# with:
# key: tests-${{ env.id }}-results-wokwi
# path: |
# tests/**/*.xml
# tests/**/result_*.json
- name: Check if already run
if: ${{ github.event.pull_request.number != null }}
id: get-cache-results
uses: actions/cache/restore@v4
with:
key: tests-${{ env.id }}-results-wokwi
path: |
tests/**/*.xml
tests/**/result_*.json

- name: Evaluate if tests should be run
id: check-tests
Expand All @@ -54,35 +53,48 @@ jobs:

echo "enabled=$enabled" >> $GITHUB_OUTPUT

- name: Checkout Repository
- name: Checkout user repository
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
uses: actions/checkout@v4
if: steps.check-tests.outputs.enabled == 'true'
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
sparse-checkout-cone-mode: false
sparse-checkout: |
/*
!.github

# To avoid giving unknown scripts elevated permissions, download them from the master branch
- name: Get CI scripts from master
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
run: |
mkdir -p .github
cd .github
curl https://codeload.github.com/${{ github.repository }}/tar.gz/master | tar -xz --strip=2 arduino-esp32-master/.github

- uses: actions/setup-python@v5
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
with:
cache-dependency-path: tests/requirements.txt
cache: 'pip'
python-version: '3.x'

- name: Install dependencies
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
run: |
pip install -U pip
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi

- name: Install Wokwi CLI
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
run: curl -L https://wokwi.com/ci/install.sh | sh

- name: Wokwi CI Server
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
uses: wokwi/wokwi-ci-server-action@v1

- name: Get binaries
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
id: cache-build-binaries
uses: actions/cache/restore@v4
with:
Expand All @@ -94,21 +106,20 @@ jobs:
~/.arduino/tests/**/build*.tmp/*.json

- name: Run Tests
if: steps.check-tests.outputs.enabled == 'true'
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
env:
WOKWI_CLI_TOKEN: ${{ secrets.WOKWI_CLI_TOKEN }}
run: |
bash .github/scripts/tests_run.sh -c -type ${{ inputs.type }} -t ${{inputs.chip}} -i 0 -m 1 -W ${{env.WOKWI_TIMEOUT}}

# Disabled as Wokwi infrastrucutre is not stable (so we can re-trigger the tests manually)
# - name: Upload ${{ inputs.chip }} ${{ inputs.type }} Wokwi results as cache
# uses: actions/cache/save@v4
# if: ${{ always() && steps.check-tests.outputs.enabled == 'true' }}
# with:
# key: tests-${{ env.id }}-results-wokwi
# path: |
# tests/**/*.xml
# tests/**/result_*.json
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} Wokwi results as cache
uses: actions/cache/save@v4
if: ${{ always() && steps.check-tests.outputs.enabled == 'true' }}
with:
key: tests-${{ env.id }}-results-wokwi
path: |
tests/**/*.xml
tests/**/result_*.json

- name: Upload ${{ inputs.chip }} ${{ inputs.type }} Wokwi results as artifacts
uses: actions/upload-artifact@v4
Expand Down
2 changes: 2 additions & 0 deletions tools/pre-commit/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pre-commit==3.7.1
docutils==0.21.2
Loading