Skip to content

Merge pull request #6 from Ximaz/develop #35

Merge pull request #6 from Ximaz/develop

Merge pull request #6 from Ximaz/develop #35

Workflow file for this run

name: "ci"
on:
- push
env:
UNIT_TESTS: "./unit_tests"
VALGRIND_REPORTS: "./valgrind-reports.log"
ARTIFACTS: "${{ vars.ARTIFACTS }}"
MIRROR_URL: "${{ vars.MIRROR_URL }}"
SSH_PRIVATE_KEY: "${{ secrets.SSH_PRIVATE_KEY }}"
SSH_PRIVATE_KEY_PASSPHRASE: "${{ secrets.SSH_PRIVATE_KEY_PASSPHRASE }}"
jobs:
check-basics:
runs-on: "ubuntu-latest"
outputs:
continue: "${{ steps.basic-check.outputs.continue }}"
steps:
- id: "basic-check"
continue-on-error: true
if: "${{ env.ARTIFACTS }}"
run: "echo \"continue=1\" >> $GITHUB_OUTPUT"
basics:
needs:
- "check-basics"
runs-on: "ubuntu-latest"
if: "${{ needs.check-basics.outputs.continue == '1' }}"
container:
image: "ghcr.io/epitech/coding-style-checker:latest"
steps:
- name: "Checkout"
uses: "actions/checkout@v4.1.1"
with:
fetch-depth: 0
- name: "Temporary files"
run: "[[ $(find . -type f \\( -name '*.o' -o -name '*.log' -o -name '.env' -o -name '*.so' -o -name '*.a' -o -name '*.gcno' -o -name '*.gcda' \\)) == \"\" ]] && exit 0 || exit 1"
- name: "Checking for the artifacts before compilation"
run: "for a in ${{ env.ARTIFACTS }} ; do [ ! -f \"${a}\" ]; done"
- name: "Checking make on it's own"
timeout-minutes: 1
run: "make && for a in ${{ env.ARTIFACTS }}; do [ -f \"${a}\" ]; done"
- name: "Checking for make relink on it's own"
timeout-minutes: 1
run: "[[ $(make) == \"\" ]] && exit 1 || echo 0"
- name: "Checking 'all' rule"
timeout-minutes: 1
run: "make all && for a in ${{ env.ARTIFACTS }}; do [ -f \"${a}\" ]; done"
- name: "Checking for 'all' make relink"
timeout-minutes: 1
run: "[[ $(make all) == \"\" ]] && exit 1 || echo 0"
- name: "Checking 'clean' rule"
timeout-minutes: 1
run: "make clean && echo $(find . -type d -name '.git' -prune -o \\( -type f \\( -name '*.o' -o -name '.env' -o -name '*.log' -o -name '*.gcno' -o -name '*.gcda' \\) \\) -print) && [[ $(find . -type d -name '.git' -prune -o \\( -type f \\( -name '*.o' -o -name '.env' -o -name '*.log' -o -name '*.gcno' -o -name '*.gcda' \\) \\) -print) == \"\" ]] && exit 0 || exit 1"
- name: "Checking 'fclean' rule"
timeout-minutes: 1
run: |
make
make fclean
for a in ${{ env.ARTIFACTS }}; do [ ! -f "${a}" ]; done
if [[ $(find . -type d -name '.git' -prune -o \( -type f \( -name '*.o' -o -name '*.log' -o -name '.env' -o -name '*.so' -o -name '*.a' -o -name '*.gcno' -o -name '*.gcda' \) \) -print) == "" ]]; then
exit 0
else
exit 1
fi
- name: "Checking 're' rule"
timeout-minutes: 1
run: |
make re
for a in ${{ env.ARTIFACTS }} ; do [ -f "${a}" ]; done
- name: "Checking the artifacts rule"
timeout-minutes: 1
run: |
for a in ${{ env.ARTIFACTS }}; do make "${a}" && [ -f "${a}" ]; done
- name: "Checking for the artifacts make relink"
timeout-minutes: 1
run: |
for a in ${{ env.ARTIFACTS }}; do
if [[ $(make "${a}") == "" ]]; then exit 1; fi;
done
- name: "Clean up"
run: "make fclean"
- name: "Check coding style"
run: "/usr/local/bin/check.sh $(pwd) $(pwd)"
- name: "Annotate coding-style errors"
run: |
status=0
while IFS= read -r line; do
file=$(echo "${line}" | cut -d ':' -f1)
pos=$(echo "${line}" | cut -d ':' -f2)
type=$(echo "${line}" | cut -d ':' -f3)
csid=$(echo "${line}" | cut -d ':' -f4)
[[ "${type:1}" == "illegal"* ]] && continue
echo "::error file=${file},line=${pos},title=${type:1} ${csid}::${type:1}: ${csid} at ${file}:${pos}"
status=1
done < coding-style-reports.log
exit "${status}"
run-tests:
needs:
- "basics"
runs-on: "ubuntu-latest"
container:
image: "epitechcontent/epitest-docker:latest"
steps:
- name: "Checkout"
uses: "actions/checkout@v4.1.1"
with:
fetch-depth: 0
- name: "Run tests"
timeout-minutes: 1
run: "[[ $(grep -E \"^tests_run:\" Makefile) == \"\" ]] && exit 0 || make tests_run"
- name: "Run valgrind"
run: "[ -f \"${{ env.UNIT_TESTS }}\" ] && valgrind -s --leak-check=full --track-origins=yes --read-var-info=yes --trace-children=yes --show-leak-kinds=all --read-inline-info=yes --errors-for-leak-kinds=all ${{ env.UNIT_TESTS }} 2>${{ env.VALGRIND_REPORTS }}"
- name: "Analyze valgrind report"
run: |
[ ! -f "${{ env.VALGRIND_REPORTS }}" ] && exit 0
status=0
block=""
while IFS= read -r line; do
if [[ "${block}" != "" ]]; then
if [[ $(echo "${line}" | grep '^==.*== $') ]]; then
echo "::error title=Valgrind Error::${block}"
block=""
status=1
else
block="${block}%0A${line}"
fi
fi
if [[ $(echo "${line}" | grep '^==.*== .* bytes in .* blocks are definitely lost in loss record .* of .*$') ]]; then
block="${line}"
fi
done < ${{ env.VALGRIND_REPORTS }}
exit "${status}"
check-mirror-commits:
runs-on: "ubuntu-latest"
needs:
- "run-tests"
outputs:
continue: "${{ steps.mirroring-check.outputs.continue }}"
steps:
- id: "mirroring-check"
continue-on-error: true
if: "${{ env.MIRROR_URL && env.SSH_PRIVATE_KEY }}"
run: "echo \"continue=1\" >> $GITHUB_OUTPUT"
mirror-commits:
needs:
- "check-mirror-commits"
if: "${{ needs.check-mirror-commits.outputs.continue == '1' }}"
runs-on: "ubuntu-latest"
steps:
- name: "Checkout"
uses: "actions/checkout@v4.1.1"
with:
fetch-depth: 0
- name: "Mirror commits"
uses: "./.github/workflows/repository-mirroring-action"
with:
target_repo_url: "${{ env.MIRROR_URL }}"
ssh_private_key: "${{ env.SSH_PRIVATE_KEY }}"
ssh_private_key_passphrase: "${{ env.SSH_PRIVATE_KEY_PASSPHRASE }}"