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-CD Updates #1014

Merged
merged 18 commits into from
Sep 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
966 changes: 966 additions & 0 deletions .github/.cSpellWords.txt

Large diffs are not rendered by default.

242 changes: 184 additions & 58 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,66 @@ on:
branches: ["**"]
workflow_dispatch:

env:
bashPass: \033[32;1mPASSED -
bashWarn: \033[33;1mWARNING -
bashFail: \033[31;1mFAILED -
bashEnd: \033[0m

jobs:
unittest:
runs-on: ubuntu-latest
steps:
- name: Clone This Repo
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
submodules: recursive
- name: Build
- env:
stepName: Build Unit Tests
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group::Install Dependencies"
git submodule update --checkout
cd tools/CMock
git submodule update --init vendor/unity
cd ../..
sudo apt-get install -y lcov
sudo apt-get install -y unifdef
echo "::endgroup::"

echo "::group:: ${{ env.stepName }}"
cmake -S test/unit-test -B test/unit-test/build/
make -C test/unit-test/build/ all
- name: Test
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Run Unit Tests
name: ${{ env.stepName }}
shell: bash
run: |
cd test/unit-test/build/
ctest -E system --output-on-failure
cd ..
- name: Coverage
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
ctest --test-dir test/unit-test/build/ -E system --output-on-failure
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Test Line and Branch Coverage
name: ${{ env.stepName }}
shell: bash
run: |
# ${{ env.stepName }}
echo "::group::Build Tests"
make -C test/unit-test/build/ coverage
echo "::endgroup::"
echo -e "${{ env.bashPass }} Built Coverage Tests ${{ env.bashEnd }}"

lcov --list --rc lcov_branch_coverage=1 test/unit-test/build/coverage.info

echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- name: Check Coverage
uses: FreeRTOS/CI-CD-Github-Actions/coverage-cop@main
with:
Expand All @@ -42,36 +75,17 @@ jobs:
spell-check:
runs-on: ubuntu-latest
steps:
- name: Checkout Parent Repo
uses: actions/checkout@v2
with:
ref: main
repository: aws/aws-iot-device-sdk-embedded-C
path: main
- name: Clone This Repo
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Run spellings check
uses: FreeRTOS/CI-CD-Github-Actions/spellings@main
with:
path: ./tcp
- name: Install spell
run: |
sudo apt-get install spell
sudo apt-get install util-linux
- name: Check spelling
run: |
PATH=$PATH:main/tools/spell
# Make sure that the portable directory is not included in the spellcheck.
sed -i 's/find $DIRNAME/find $DIRNAME -not -path '*portable*'/g' main/tools/spell/find-unknown-comment-words
find-unknown-comment-words --directory tcp/ --lexicon tcp/lexicon.txt
if [ "$?" = "0" ]; then
exit 0
else
exit 1
fi
path: ./

formatting:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Check formatting
uses: FreeRTOS/CI-CD-Github-Actions/formatting@main
with:
Expand All @@ -80,7 +94,7 @@ jobs:
doxygen:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Run doxygen build
uses: FreeRTOS/CI-CD-Github-Actions/doxygen@main
with:
Expand All @@ -102,56 +116,130 @@ jobs:
run: git submodule update --checkout --init --recursive

- name: Run manifest verifier
uses: FreeRTOS/CI-CD-GitHub-Actions/manifest-verifier@v2
uses: FreeRTOS/CI-CD-GitHub-Actions/manifest-verifier@main
with:
path: ./
fail-on-incorrect-version: true

link-verifier:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Check Links
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: FreeRTOS/CI-CD-Github-Actions/link-verifier@main

build-checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build Install Dependencies
- uses: actions/checkout@v3
- env:
stepName: Build Install Dependencies
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
sudo apt-get install -y libpcap-dev
- name: Build checks (Enable all functionalities)
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Build checks (Enable all functionalities)
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
cmake -S . -B build -DFREERTOS_PLUS_TCP_TEST_CONFIGURATION=ENABLE_ALL
cmake --build build --target freertos_plus_tcp_build_test
- name: Build checks (Enable all functionalities IPv4)
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Build checks (Enable all functionalities IPv4)
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
cmake -S . -B build -DFREERTOS_PLUS_TCP_TEST_CONFIGURATION=ENABLE_ALL_IPV4
cmake --build build --target clean
cmake --build build --target freertos_plus_tcp_build_test
- name: Build checks (Enable all functionalities IPv6)
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Build checks (Enable all functionalities IPv6)
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
cmake -S . -B build -DFREERTOS_PLUS_TCP_TEST_CONFIGURATION=ENABLE_ALL_IPV6
cmake --build build --target freertos_plus_tcp_build_test
- name: Build checks (Enable all functionalities IPv4 IPv6)
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Build checks (Enable all functionalities IPv4 IPv6)
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
cmake -S . -B build -DFREERTOS_PLUS_TCP_TEST_CONFIGURATION=ENABLE_ALL_IPV4_IPV6
cmake --build build --target clean
cmake --build build --target freertos_plus_tcp_build_test
- name: Build checks (Enable all functionalities IPv4 TCP)
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Build checks (Enable all functionalities IPv4 TCP)
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
cmake -S . -B build -DFREERTOS_PLUS_TCP_TEST_CONFIGURATION=ENABLE_ALL_IPV4_TCP
cmake --build build --target clean
cmake --build build --target freertos_plus_tcp_build_test
- name: Build checks (Enable all functionalities IPv6 TCP)
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Build checks (Enable all functionalities IPv6 TCP)
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
cmake -S . -B build -DFREERTOS_PLUS_TCP_TEST_CONFIGURATION=ENABLE_ALL_IPV6_TCP
cmake --build build --target freertos_plus_tcp_build_test
- name: Build checks (Disable all functionalities)
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Build checks (Disable all functionalities)
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
cmake -S . -B build -DFREERTOS_PLUS_TCP_TEST_CONFIGURATION=DISABLE_ALL
cmake --build build --target clean
cmake --build build --target freertos_plus_tcp_build_test
- name: Build checks (Default configuration)
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Build checks (Default configuration)
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
cmake -S . -B build -DFREERTOS_PLUS_TCP_TEST_CONFIGURATION=DEFAULT_CONF
cmake --build build --target clean
cmake --build build --target freertos_plus_tcp_build_test
- name: Build checks (Header Self Contain)
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Build checks (Header Self Contain)
shell: bash
run: |
cmake -S . -B build -DFREERTOS_PLUS_TCP_TEST_CONFIGURATION=HEADER_SELF_CONTAIN
cmake --build build --target clean
Expand All @@ -167,13 +255,24 @@ jobs:
complexity:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup
run: sudo apt-get install complexity
- name: Install Uncrustify
run: sudo apt-get install uncrustify
- name: Complexity
- uses: actions/checkout@v3
- env:
stepName: Setup
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
sudo apt-get install complexity
sudo apt-get install uncrustify
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Complexity
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
COMPLEXITY_PARAMS="--scores --threshold=10 --horrid-threshold=283"
TEMP_DIR=./temp
mkdir -p ${TEMP_DIR}
Expand All @@ -187,44 +286,71 @@ jobs:
find ${TEMP_DIR} -iname '*.c' | xargs complexity ${COMPLEXITY_PARAMS}
RESULT=$?
rm -rf ${TEMP_DIR}
echo "::endgroup::"
if [ "${RESULT}" = "0" ]; then
echo "All is good."
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"
exit 0
else
echo "Sources are too complex, rc = " ${RESULT}
echo -e "${{ env.bashFail }} Sources are too complex, rc = ${RESULT} ${{ env.bashEnd }}"
echo -e "${{ env.bashFail }} ${{ env.stepName }} ${{ env.bashEnd }}"
exit 1
fi

git-secrets:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Checkout awslabs/git-secrets
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
repository: awslabs/git-secrets
ref: master
path: git-secrets
- name: Install git-secrets
run: cd git-secrets && sudo make install && cd ..
- name: Run git-secrets
- env:
stepName: Install git-secrets
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
cd git-secrets && sudo make install && cd ..
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- env:
stepName: Run git-secrets
name: ${{ env.stepName }}
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
git-secrets --register-aws
git-secrets --scan
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

proof_ci:
if: ${{ github.event.pull_request }}
runs-on: cbmc_ubuntu-latest_16-core
steps:
- name: Set up CBMC runner
uses: FreeRTOS/CI-CD-Github-Actions/set_up_cbmc_runner@main
with:
cbmc_version: "5.61.0"
- run: |

- env:
stepName: Install Dependencies
name: ${{ env.stepName }}
shell: bash
run: |
# ${{ env.stepName }}
echo "::group:: ${{ env.stepName }}"
git submodule update --init --checkout --recursive
sudo apt-get update
sudo apt-get install --yes --no-install-recommends gcc-multilib
echo "::endgroup::"
echo -e "${{ env.bashPass }} ${{ env.stepName }} ${{ env.bashEnd }}"

- name: Run CBMC
uses: FreeRTOS/CI-CD-Github-Actions/run_cbmc@main
with:
Expand Down
Loading