Skip to content

Mc lab 3 v14

Mc lab 3 v14 #53

name: Cheking of compile Arduino sketch for AVR/AtMega
on:
pull_request:
branches: [main, master]
env:
platform: "arduino:avr"
fqbn_master: "arduino:avr:mega"
COMMIT_COUNT: $(( ${{ github.event_name == 'pull_request' && github.event.pull_request.commits || 0 }} + 1 ))
jobs:
handle_bad_branch_name:
runs-on: ubuntu-22.04
if: (contains(github.head_ref, 'mc_lab_1') || contains(github.head_ref, 'mc_lab_2') || contains(github.head_ref, 'mc_lab_3') || contains(github.head_ref, 'mc_lab_4') || contains(github.head_ref, 'mc_lab_5') || contains(github.head_ref, 'mc_lab_6') || contains(github.head_ref, 'mc_lab_7')) == false
steps:
- name: Fail the build
run: |
echo "The branch name is not correct. It should contain 'mc_lab_' prefix"
exit 1
build_labs_1_to_4:
runs-on: ubuntu-22.04
if: contains(github.head_ref, 'mc_lab_1') || contains(github.head_ref, 'mc_lab_2') || contains(github.head_ref, 'mc_lab_3') || contains(github.head_ref, 'mc_lab_4')
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: ${{ env.COMMIT_COUNT }}
- name: Get changed files list
uses: ./.github/actions/get_changed_files
- name: Set up Arduino CLI
uses: ./.github/actions/avr_setup
- name: Compile Sketch
run: arduino-cli compile --fqbn ${{ env.fqbn_master }} --output-dir build $(grep -E '\.ino$' changed_files.txt | tail -n 1 | xargs)
# TODO: remove tail -n 1
- name: Uploud artifact
uses: actions/upload-artifact@v4
with:
name: build-artifact
path: build
build_lab_5:
runs-on: ubuntu-22.04
if: contains(github.head_ref, 'mc_lab_5')
env:
fqbn_slave: "arduino:avr:nano"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: ${{ env.COMMIT_COUNT }}
- name: Get changed files list
uses: ./.github/actions/get_changed_files
- name: Get master folder
run: |
cat changed_files.txt | xargs dirname | grep 'master' | grep -m 1 -vE '/(.*master.*|.*slave.*)/' > master_project.txt
echo "Master project:"
cat master_project.txt
- name: Get slave folders
run: |
cat changed_files.txt | xargs dirname | grep 'slave' | grep -vE '/(.*master.*|.*slave.*)/' > slave_projects.txt
echo "Slave projects:"
cat slave_projects.txt
- name: Check if there is at least one master and one slave project
run: |
if [ ! -s master_project.txt ] || [ ! -s slave_projects.txt ]; then
echo "There is no master or slave project"
exit 1
fi
- name: Set up Arduino CLI
uses: ./.github/actions/avr_setup
- name: Compile master
run: while read master_folder; do arduino-cli compile --fqbn ${{ env.fqbn_master }} $master_folder/*.ino; done < master_project.txt
- name: Compile slaves
run: while read slave_folder; do arduino-cli compile --fqbn ${{ env.fqbn_slave }} $slave_folder/*.ino; done < slave_projects.txt
build_lab_6:
runs-on: ubuntu-22.04
if: contains(github.head_ref, 'mc_lab_6')
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: ${{ env.COMMIT_COUNT }}
- name: It just passes
run: echo "It just passes. It's too complex"
build_lab_7:
runs-on: ubuntu-22.04
if: contains(github.head_ref, 'mc_lab_7')
env:
register-bindings: "m2560def.inc"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: ${{ env.COMMIT_COUNT }}
- name: Get changed files list
uses: ./.github/actions/get_changed_files
- name: Setup AVRA Assembler
run: |
git clone https://github.com/Ro5bert/avra.git
cd avra
sudo make install
- name: Preprocess sketch - append register bindings to the top of the file
run: printf ".include \"${{ env.register-bindings }}\"\n\n" | cat - $(grep -m 1 -E '\.(asm|S)$' changed_files.txt | xargs) > pipeline_main_assembly_source_file.asm
- name: Compile Sketch
run: avra pipeline_main_assembly_source_file.asm
test_lab_1:
runs-on: ubuntu-22.04
needs: build_labs_1_to_4
if: contains(github.head_ref, 'mc_lab_1')
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: ${{ env.COMMIT_COUNT }}
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: build-artifact
path: mc_labs/mc_lab_01/build
- name: Extract Variant Number
id: extract_variant
run: |
variant=
echo "variant='$(echo "${{ github.head_ref }}" | sed -n 's/.*v\([0-9]\+\).*/\1/p')'" >> "$GITHUB_OUTPUT"
- name: Generate Test Scenario
id: generate_scenario
uses: OleksiuDatsko/get-lab-test-scenario-action@main
with:
lab_number: 1
variant_number: ${{ steps.extract_variant.outputs.variant }}
wokwi_toml_path: mc_labs/mc_lab_01/wokwi.toml
output: ${{ github.workspace }}/test_scenario.yml
- name: Run a Wokwi CI server
uses: wokwi/wokwi-ci-server-action@v1
- name: Test on Wokwi
id: test
uses: wokwi/wokwi-ci-action@v1
continue-on-error: true
with:
token: ${{ secrets.WOKWI_CLI_TOKEN }}
path: mc_labs/mc_lab_01/
scenario: ${{ github.workspace }}/test_scenario.yml
- name: Rerun test on Wokwi
uses: wokwi/wokwi-ci-action@v1
if: steps.test.outcome == 'failure'
with:
token: ${{ secrets.WOKWI_CLI_TOKEN }}
path: mc_labs/mc_lab_01/
scenario: ${{ github.workspace }}/test_scenario.yml