stages:
  - download
  - test

before_script:
  - git config --global --add safe.directory ${CI_PROJECT_DIR}

.check-check-package_base:
    stage: test
    script:
        - python3 -m pytest -v utils/checkpackagelib/

.check-check-symbol_base:
    stage: test
    script:
        - python3 -m pytest -v utils/checksymbolslib/

.check-DEVELOPERS_base:
    stage: test
    script:
        - utils/get-developers -v

.check-package_base:
    stage: test
    script:
        - make check-package

.check-symbol_base:
    stage: test
    script:
        - utils/check-symbols

.defconfig_check:
    stage: test
    script:
        - DEFCONFIG_NAME=$(echo ${CI_JOB_NAME} | sed -e 's,_check$,,g')
        - echo "Configure Buildroot for ${DEFCONFIG_NAME}"
        - make ${DEFCONFIG_NAME}
        - support/scripts/check-dotconfig.py .config configs/${DEFCONFIG_NAME}
    artifacts:
        when: on_failure
        expire_in: 2 weeks
        paths:
            - .config

.run_make: &run_make
    |
      make O=${OUTPUT_DIR} > >(tee build.log |grep '>>>') 2>&1 || {
          echo 'Failed build last output'
          tail -200 build.log
          exit 1
      }

.defconfig_base:
    stage: test
    script:
        - DEFCONFIG_NAME=${CI_JOB_NAME}
        - OUTPUT_DIR=output
        - echo "Configure Buildroot for ${DEFCONFIG_NAME}"
        - make ${DEFCONFIG_NAME}
        - ./support/scripts/check-dotconfig.py .config ./configs/${DEFCONFIG_NAME}
        - echo 'Build buildroot'
        - *run_make
        - |
            ./support/scripts/boot-qemu-image.py "${DEFCONFIG_NAME}" > >(tee runtime-test.log) 2>&1 || {
                echo 'Failed runtime test last output'
                tail -200 runtime-test.log
                exit 1
            }
    retry:
        max: 2
        when:
            - runner_system_failure
            - stuck_or_timeout_failure
    artifacts:
        when: always
        expire_in: 2 weeks
        paths:
            - .config
            - build.log
            - output/images/
            - output/build/build-time.log
            - output/build/packages-file-list.txt
            - output/build/*/.config
            - runtime-test.log

.runtime_test_download:
    stage: download
    # Keep test-dl directory so the downloaded files can be an artifact of
    # the job passed to all jobs of next stages.
    script: ./support/testing/run-tests -d test-dl/ --prepare-only
    artifacts:
        when: always
        paths:
            - test-dl/

.runtime_test_base:
    stage: test
    # Keep build directories so the rootfs can be an artifact of the job. The
    # runner will clean up those files for us.
    # Multiply every emulator timeout by 10 to avoid sporadic failures in
    # elastic runners.
    script:
        - TEST_CASE_NAME=${CI_JOB_NAME}
        - echo "Starting runtime test ${TEST_CASE_NAME}"
        - |
            ./support/testing/run-tests -o test-output/ -d test-dl/ -k --timeout-multiplier 10 ${TEST_CASE_NAME} || {
                echo 'Failed runtime test last output'
                if [ -f test-output/*-run.log ]; then
                    tail -200 test-output/*-run.log | sed 's/\r\r$//'
                else
                    tail -200 test-output/*-build.log
                fi
                exit 1
            }
    retry:
        max: 2
        when:
            - runner_system_failure
            - stuck_or_timeout_failure
    artifacts:
        when: always
        expire_in: 2 weeks
        paths:
            - test-output/*.log
            - test-output/*/.config
            - test-output/*/images/*

.test_pkg:
    stage: test
    script:
        - OUTPUT_DIR=${CI_JOB_NAME}
        - echo "Configure Buildroot for ${OUTPUT_DIR}"
        - make O=${OUTPUT_DIR} syncconfig
        - make O=${OUTPUT_DIR} savedefconfig
        - echo 'Build buildroot'
        - *run_make
    needs:
        - pipeline: $PARENT_PIPELINE_ID
          job: generate-gitlab-ci-yml
    retry:
        max: 2
        when:
            - runner_system_failure
            - stuck_or_timeout_failure
    artifacts:
        when: always
        expire_in: 2 weeks
        paths:
            - build.log
            - br-test-pkg/*/.config
            - br-test-pkg/*/defconfig
            - br-test-pkg/*/build/build-time.log
            - br-test-pkg/*/build/packages-file-list*.txt
