From 3f138d273c5c33327c8bce8ca829c874e7f8b4d5 Mon Sep 17 00:00:00 2001 From: MykolaKovalyk Date: Fri, 16 Aug 2024 15:15:20 +0300 Subject: [PATCH 1/2] Add first pipeline check --- .github/.gitignore | 1 - .github/actions/get_changed_files/action.yml | 13 ++ .github/workflows/Lab_01_CI.yml | 37 ------ .github/workflows/lab-validation.yml | 120 +++++++++++++++++++ 4 files changed, 133 insertions(+), 38 deletions(-) delete mode 100644 .github/.gitignore create mode 100644 .github/actions/get_changed_files/action.yml delete mode 100644 .github/workflows/Lab_01_CI.yml create mode 100644 .github/workflows/lab-validation.yml diff --git a/.github/.gitignore b/.github/.gitignore deleted file mode 100644 index 8b13789..0000000 --- a/.github/.gitignore +++ /dev/null @@ -1 +0,0 @@ - diff --git a/.github/actions/get_changed_files/action.yml b/.github/actions/get_changed_files/action.yml new file mode 100644 index 0000000..ecf73ac --- /dev/null +++ b/.github/actions/get_changed_files/action.yml @@ -0,0 +1,13 @@ +name: "Get changed files list" +description: "Setup Node with caching for dependencies" +runs: + using: "composite" + steps: + - name: Get changed files list + id: get_changed_files + run: | + echo "Changed files:" + git diff --name-only ${{ github.event.pull_request.base.sha }} > changed_files.txt + cat changed_files.txt + echo "The list is saved to changed_files.txt" + shell: bash \ No newline at end of file diff --git a/.github/workflows/Lab_01_CI.yml b/.github/workflows/Lab_01_CI.yml deleted file mode 100644 index 985573b..0000000 --- a/.github/workflows/Lab_01_CI.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Cheking of compile Arduino sketch for AVR/AtMega and ESP8266 - -on: - push: - branches: [ main, master ] - pull_request: - branches: [ main, master ] - -jobs: - test-matrix: - strategy: - matrix: - arduino-platform: - - "arduino:avr" - - "esp8266:esp8266" - include: - - arduino-platform: "arduino:avr" - fqbn: "arduino:avr:mega" - - arduino-platform: "esp8266:esp8266" - fqbn: "esp8266:esp8266:generic" - - runs-on: ubuntu-22.04 - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Arduino CLI - uses: arduino/setup-arduino-cli@v2 - - - name: Install platform - run: | - arduino-cli core update-index - arduino-cli core install ${{ matrix.arduino-platform }} - - - name: Compile Sketch - run: arduino-cli compile --fqbn ${{ matrix.fqbn }} ./mc_labs/mc_lab_01/*.ino diff --git a/.github/workflows/lab-validation.yml b/.github/workflows/lab-validation.yml new file mode 100644 index 0000000..07a90ae --- /dev/null +++ b/.github/workflows/lab-validation.yml @@ -0,0 +1,120 @@ +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: arduino/setup-arduino-cli@v2 + + - name: Install platform + run: | + arduino-cli core update-index + arduino-cli core install ${{ env.platform }} + + - name: Compile Sketch + run: arduino-cli compile --fqbn ${{ env.fqbn_master }} $(grep -E '\.ino$' changed_files.txt | xargs) + 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: arduino/setup-arduino-cli@v2 + + - name: Install platform + run: | + arduino-cli core update-index + arduino-cli core install ${{ env.platform }} + + - 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: sudo apt-get install avra + - 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 From dda3cfdf7573c66c1078050ed386de5bda55df58 Mon Sep 17 00:00:00 2001 From: MykolaKovalyk Date: Sat, 17 Aug 2024 03:09:31 +0300 Subject: [PATCH 2/2] Commit a basic example for lab 5 --- mc_labs/mc_lab_05/lab5-ptu/lab5.pdsprj | Bin 0 -> 28362 bytes .../lab5-ptu/sketch_master/sketch_master.ino | 56 +++++++++++ .../lab5-ptu/sketch_slave1/sketch_slave1.ino | 90 ++++++++++++++++++ .../lab5-ptu/sketch_slave2/sketch_slave2.ino | 77 +++++++++++++++ 4 files changed, 223 insertions(+) create mode 100644 mc_labs/mc_lab_05/lab5-ptu/lab5.pdsprj create mode 100644 mc_labs/mc_lab_05/lab5-ptu/sketch_master/sketch_master.ino create mode 100644 mc_labs/mc_lab_05/lab5-ptu/sketch_slave1/sketch_slave1.ino create mode 100644 mc_labs/mc_lab_05/lab5-ptu/sketch_slave2/sketch_slave2.ino diff --git a/mc_labs/mc_lab_05/lab5-ptu/lab5.pdsprj b/mc_labs/mc_lab_05/lab5-ptu/lab5.pdsprj new file mode 100644 index 0000000000000000000000000000000000000000..ddd6e5729f117025a6b5ed2173ee816c629c25bb GIT binary patch literal 28362 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 S>|ZA=