name: FreeRTOS Demos on: push: pull_request: workflow_dispatch: env: bashPass: \033[32;1mPASSED - bashWarn: \033[33;1mWARNING - bashFail: \033[31;1mFAILED - bashEnd: \033[0m pwshPass: "`e[32;1mPASSED -" pwshWarn: "`e[33;1mWARNING -" pwshFail: "`e[31;1mFAILED -" pwshEnd: "`e[0m" jobs: WIN32-MSVC: name: WIN32 MSVC runs-on: windows-latest steps: - env: stepName: Checkout Repository name: ${{ env.stepName }} uses: actions/checkout@v3 - env: stepName: Fetch Required Submodule name: ${{ env.stepName }} shell: bash run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e git submodule update --checkout --init --depth 1 \ FreeRTOS/Source \ FreeRTOS-Plus/Source/FreeRTOS-Plus-Trace exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{env.stepName}} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{env.stepName}} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Add msbuild to PATH name: ${{ env.stepName }} uses: microsoft/setup-msbuild@v1.1 - env: stepName: Build WIN32-MSVC Full Demo name: ${{ env.stepName }} id: build-win32-msvs-full-demo working-directory: FreeRTOS/Demo/WIN32-MSVC run: | # ${{ env.stepName }} echo "::group::${{ env.stepName }}" $content = Get-Content -Path 'main.c' -Raw $newContent = $content -replace 'int\s+main(.*?)void(.*?)\r?\n\s*{', 'int main( void ){setvbuf( stdout, NULL, _IONBF, 0 );' $newContent | Set-Content -Path 'main.c' msbuild WIN32.sln /p:Platform=Win32 -t:rebuild msbuild WIN32.sln /p:Platform=x64 -t:rebuild $exitStatus = $? echo "::endgroup::" if($exitStatus -eq 1) { echo "${{ env.pwshPass }} ${{env.stepName}} ${{ env.pwshEnd }}" }else { echo "${{ env.pwshFail }} ${{env.stepName}} ${{ env.pwshEnd }}" exit 1 } - env: stepName: Run and monitor WIN32-MSVC Full Demo - Win32 name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/WIN32-MSVC/Win32/Debug/RTOSDemo.exe timeout-seconds: 60 success-line: "No errors - tick count" retry-attempts: 3 - env: stepName: Run and monitor WIN32-MSVC Full Demo - x64 name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/WIN32-MSVC/x64/Debug/RTOSDemo.exe timeout-seconds: 60 success-line: "No errors - tick count" retry-attempts: 3 - env: stepName: Build WIN32-MSVC Blinky Demo name: ${{ env.stepName }} id: build-win32-msvs-blinky-demo working-directory: FreeRTOS/Demo/WIN32-MSVC run: | # ${{ env.stepName }} echo "::group::${{ env.stepName }}" $content = Get-Content -Path 'main.c' -Raw $newContent = $content -replace '#define\s+mainCREATE_SIMPLE_BLINKY_DEMO_ONLY\s+0', '#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 1' $newContent | Set-Content -Path 'main.c' msbuild WIN32.sln /p:Platform=Win32 -t:rebuild msbuild WIN32.sln /p:Platform=x64 -t:rebuild echo "::endgroup::" $exitStatus = $? if($exitStatus -eq 1) { echo "${{ env.pwshPass }} ${{ env.stepName }} ${{ env.pwshEnd }}" }else { echo "${{ env.pwshFail }} ${{ env.stepName }} ${{ env.pwshEnd }}" exit 1 } - env: stepName: Run and monitor WIN32-MSVC Blinky Demo - Win32 name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/WIN32-MSVC/Win32/Debug/RTOSDemo.exe timeout-seconds: 60 success-line: "Message received from software timer" retry-attempts: 3 - env: stepName: Run and monitor WIN32-MSVC Blinky Demo - x64 name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/WIN32-MSVC/x64/Debug/RTOSDemo.exe timeout-seconds: 60 success-line: "Message received from software timer" retry-attempts: 3 - env: stepName: Build WIN32-MSVC-Static-Allocation-Only Demo name: ${{ env.stepName }} id: build-win32-msvs-static-allocation-only-demo working-directory: FreeRTOS/Demo/WIN32-MSVC-Static-Allocation-Only run: | # ${{ env.stepName }} echo "::group::${{ env.stepName }}" $content = Get-Content -Path 'main.c' -Raw $newContent = $content -replace 'int\s+main(.*?)void(.*?)\r?\n\s*{', 'int main( void ){setvbuf( stdout, NULL, _IONBF, 0 );' $newContent | Set-Content -Path 'main.c' msbuild WIN32.sln -t:rebuild $exitStatus = $? echo "::endgroup::" if($exitStatus -eq 1) { echo "${{ env.pwshPass }} ${{ env.stepName }} ${{ env.pwshEnd }}" }else { echo "${{ env.pwshFail }} ${{ env.stepName }} ${{ env.pwshEnd }}" exit 1 } - env: stepName: Run and monitor WIN32-MSVC-Static-Allocation-Only Demo name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/WIN32-MSVC-Static-Allocation-Only/Debug/RTOSDemo.exe timeout-seconds: 60 success-line: "No errors - tick count" retry-attempts: 3 WIN32-MingW: name: WIN32 MingW runs-on: windows-latest steps: - env: stepName: Checkout Repository name: ${{ env.stepName }} uses: actions/checkout@v3 - env: stepName: Fetch Required Submodule name: ${{ env.stepName }} shell: bash run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" git submodule update --checkout --init --depth 1 \ FreeRTOS/Source \ FreeRTOS-Plus/Source/FreeRTOS-Plus-Trace echo -e "::endgroup::" echo -e "${{ env.bashPass }} ${{env.stepName}} ${{ env.bashEnd }}" - env: stepName: Build WIN32-MingW Full Demo name: ${{ env.stepName }} id: build-win32-mingw-full-demo working-directory: FreeRTOS/Demo/WIN32-MingW run: | # ${{ env.stepName }} echo "::group::${{ env.stepName }}" $content = Get-Content -Path 'main.c' -Raw $newContent = $content -replace 'int\s+main(.*?)void(.*?)\r?\n\s*{', 'int main( void ){setvbuf( stdout, NULL, _IONBF, 0 );' $newContent | Set-Content -Path 'main.c' gcc --version make --version make $exitStatus = $? echo "::endgroup::" if($exitStatus -eq 1) { echo "${{ env.pwshPass }} ${{ env.stepName }} ${{env.pwshEnd}}" }else { echo "${{ env.pwshFail }} ${{ env.stepName }} ${{env.pwshEnd}}" exit 1 } - env: stepName: Run and monitor WIN32-MingW Full Demo name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/WIN32-MingW/build/RTOSDemo.exe timeout-seconds: 60 success-line: "No errors - tick count" - env: stepName: Build WIN32-MingW Blinky Demo name: ${{ env.stepName }} id: build-win32-mingw-blinky-demo working-directory: FreeRTOS/Demo/WIN32-MingW run: | # ${{ env.stepName }} echo "::group::${{ env.stepName }}" $content = Get-Content -Path 'main.c' -Raw $newContent = $content -replace '#define\s+mainCREATE_SIMPLE_BLINKY_DEMO_ONLY\s+0', '#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 1' $newContent = $newContent -replace 'int\s+main(.*?)void(.*?)\r?\n\s*{', 'int main( void ){setvbuf( stdout, NULL, _IONBF, 0 );' $newContent | Set-Content -Path 'main.c' gcc --version make --version make $exitStatus = $? echo "::endgroup::" if($exitStatus -eq 1) { echo "${{ env.pwshPass }} ${{ env.stepName }} ${{ env.pwshEnd }}" }else { echo "${{ env.pwshFail }} ${{ env.stepName }} ${{ env.pwshEnd }}" exit 1 } - env: stepName: Run and monitor WIN32-MingW Blinky Demo name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/WIN32-MingW/build/RTOSDemo.exe timeout-seconds: 60 success-line: "Message received from software timer" POSIX-GCC: name: Posix GCC runs-on: ubuntu-latest steps: - env: stepName: Checkout Repository name: ${{ env.stepName }} uses: actions/checkout@v3 - env: stepName: Fetch Required Submodule name: ${{ env.stepName }} shell: bash run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e git submodule update --checkout --init --depth 1 \ FreeRTOS/Source \ FreeRTOS-Plus/Source/FreeRTOS-Plus-Trace set -e exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Install GCC name: ${{ env.stepName }} shell: bash run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e sudo apt-get -y update sudo apt-get -y install build-essential exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Build Posix_GCC Full Demo name: ${{ env.stepName }} id: build-posix-gcc-full-demo shell: bash working-directory: FreeRTOS/Demo/Posix_GCC run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e sed -i -z "s/int[[:space:]]*main[[:space:]]*([[:space:]]*void[[:space:]]*)\n{/int main( void ){setvbuf( stdout, NULL, _IONBF, 0 );/g" main.c make -j exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Run and monitor Posix_GCC Full Demo name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/Posix_GCC/build/posix_demo timeout-seconds: 60 success-line: "OK: No errors" retry-attempts: 3 - env: stepName: Build Posix_GCC Blinky Demo name: ${{ env.stepName }} id: build-posix-gcc-blinky-demo shell: bash working-directory: FreeRTOS/Demo/Posix_GCC run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" rm -rf build set +e make -j USER_DEMO=BLINKY_DEMO exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{env.stepName}} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Run and monitor Posix_GCC Blinky Demo name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/Posix_GCC/build/posix_demo timeout-seconds: 60 success-line: "Message received from software timer" MSP430-GCC: name: GNU MSP430 Toolchain runs-on: ubuntu-latest steps: - env: stepName: Checkout Repository name: ${{ env.stepName }} uses: actions/checkout@v3 with: submodules: true - env: stepName: Fetch Kernel Submodule name: ${{ env.stepName }} shell: bash run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e git submodule update --checkout --init --depth 1 FreeRTOS/Source exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Install MSP430 Toolchain name: ${{ env.stepName }} shell: bash run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e sudo apt-get -y update sudo apt-get -y install gcc-msp430 build-essential exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Build msp430_GCC Demo name: ${{ env.stepName }} shell: bash working-directory: FreeRTOS/Demo/msp430_GCC run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e make -j exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi ARM-GCC: name: GNU ARM Toolchain runs-on: ubuntu-latest steps: - env: stepName: Checkout Repository name: ${{ env.stepName }} uses: actions/checkout@v3 - env: stepName: Fetch Kernel Submodule name: ${{ env.stepName }} shell: bash run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e git submodule update --checkout --init --depth 1 FreeRTOS/Source FreeRTOS/Demo/ThirdParty/Community-Supported-Demos exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Install GNU ARM Toolchain name: Install GNU ARM Toolchain shell: bash run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e sudo apt-get -y update sudo apt-get -y install gcc-arm-none-eabi build-essential cmake git ninja-build python3-minimal sudo apt-get -y install qemu-system-arm qemu-efi exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Build CORTEX_MPU_M3_MPS2_QEMU_GCC Demo name: ${{ env.stepName }} shell: bash working-directory: FreeRTOS/Demo/CORTEX_MPU_M3_MPS2_QEMU_GCC run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e make -j exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Build CORTEX_LM3S102_GCC Demo name: ${{ env.stepName }} shell: bash working-directory: FreeRTOS/Demo/CORTEX_LM3S102_GCC run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e make clean make -j exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Build CORTEX_LM3S811_GCC Demo name: ${{ env.stepName }} shell: bash working-directory: FreeRTOS/Demo/CORTEX_LM3S811_GCC run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e make -j exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Build CORTEX_M0+_RP2040 Demos name: ${{ env.stepName }} shell: bash working-directory: FreeRTOS/Demo/ThirdParty/Community-Supported-Demos/CORTEX_M0+_RP2040 run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e git clone https://github.com/raspberrypi/pico-sdk.git cmake -B build -DPICO_SDK_PATH=pico-sdk -GNinja ninja -C build --verbose exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Build Qemu Runner File name: ${{ env.stepName }} shell: bash working-directory: .github/scripts run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" gcc qemu_reader.c -o ../../FreeRTOS/Demo/CORTEX_MPS2_QEMU_IAR_GCC/qemu_reader.out exitStatus=$? echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Build CORTEX_MPS2_QEMU_IAR_GCC Demo name: ${{ env.stepName }} shell: bash working-directory: FreeRTOS/Demo/CORTEX_MPS2_QEMU_IAR_GCC run: | # ${{ env.stepName }} echo -e "::group::${{ env.stepName }}" set +e make -C build/gcc -j exitStatus=$? set -e echo -e "::endgroup::" if [ $exitStatus -eq 0 ]; then echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}" else echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}" exit 1 fi - env: stepName: Run and monitor CORTEX_MPS2_QEMU_IAR_GCC Demo name: ${{ env.stepName }} uses: FreeRTOS/CI-CD-GitHub-Actions/executable-monitor@main with: exe-path: FreeRTOS/Demo/CORTEX_MPS2_QEMU_IAR_GCC/qemu_reader.out timeout-seconds: 20 success-line: "Message received from software timer" retry-attempts: 1