variables: DOCKER_REPOSITORY: mendersoftware/mender-convert S3_BUCKET_NAME: mender-convert-images # These variables are present elsewhere in the repository too. Make sure to # search for and change them too. MENDER_ARTIFACT_VERSION: master MENDER_CLIENT_VERSION: latest MENDER_ADDON_CONNECT_VERSION: latest MENDER_ADDON_CONFIGURE_VERSION: master # Make sure to update the link in mender-docs to the new one when changing # this. RASPBIAN_URL: https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2020-05-28/2020-05-27-raspios-buster-lite-armhf.zip RASPBIAN_NAME: 2020-05-27-raspios-buster-lite-armhf DEBIAN_FRONTEND: noninteractive # Docker dind configuration. # To use dind, make sure gitlab-runner's configuration # has a common mount for /certs (i.e. runners.docker.volumes) directory # and that the dind service name is always docker (default hostname). DOCKER_HOST: "tcp://docker:2376" DOCKER_CERT_PATH: "/certs/client" DOCKER_TLS_VERIFY: "1" DOCKER_TLS_CERTDIR: "/certs" include: - project: 'Northern.tech/Mender/mendertesting' file: '.gitlab-ci-check-commits.yml' - project: 'Northern.tech/Mender/mendertesting' file: '.gitlab-ci-check-license.yml' - project: 'Northern.tech/Mender/mendertesting' file: '.gitlab-ci-github-status-updates.yml' stages: - test - build - convert - test_acceptance - publish build: stage: build needs: [] image: docker:git services: - docker:19.03.5-dind script: - IMAGE_NAME=$DOCKER_REPOSITORY:pr ./docker-build --build-arg MENDER_ARTIFACT_VERSION=${MENDER_ARTIFACT_VERSION} - docker save $DOCKER_REPOSITORY:pr > image.tar artifacts: expire_in: 2w paths: - image.tar test:format: stage: test needs: [] image: alpine:3.13 before_script: - apk update - apk upgrade - apk add --update bash git shfmt - shfmt -version script: - /bin/bash - SCRIPTS=$(find modules configs scripts -type f -not -name "*.md" -not -path "scripts/linkbot/*" -not -wholename "scripts/test/*") # shfmt ## Language=Bash # -ln bash ## Indent=4 spaces # -i 4 ## List files who differ in formatting # -l ## Redirect operators should be followed by a space # -sr ## Indent switch statements # -ci ## Keep column alignment padding # -kp ## Binary operators like &&, || may start a new line # -bn ## Overwrite the source files # -w - | shfmt \ -ln bash \ -i 4 \ -l \ -sr \ -ci \ -kp \ -bn \ -w \ ${SCRIPTS} \ mender-convert* # Print diff - git diff HEAD # Actual test: exits with non zero status if diff - git diff-index --quiet HEAD .template_convert_raspbian: &convert_raspbian stage: convert needs: - job: build artifacts: true image: ubuntu:18.04 services: - docker:19.03-dind tags: - mender-qa-slave before_script: - export AWS_ACCESS_KEY_ID=$TMP_STORAGE_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$TMP_STORAGE_AWS_SECRET_ACCESS_KEY - apt update && apt install -yy bash wget unzip awscli docker.io - export IMAGE_NAME=$DOCKER_REPOSITORY:pr - docker load -i image.tar - wget -q ${RASPBIAN_URL} - unzip ${RASPBIAN_NAME}.zip script: - echo "MENDER_CLIENT_VERSION=${MENDER_CLIENT_VERSION}" > versions_override_config - echo "MENDER_ADDON_CONNECT_VERSION=${MENDER_ADDON_CONNECT_VERSION}" >> versions_override_config - echo "MENDER_ADDON_CONFIGURE_VERSION=${MENDER_ADDON_CONFIGURE_VERSION}" >> versions_override_config - env MENDER_ARTIFACT_NAME=${RASPBIAN_NAME}-mender-${MENDER_CLIENT_VERSION} ./docker-mender-convert -d ${RASPBIAN_NAME}.img -c configs/${RASPBERRYPI_PLATFORM}_config -c configs/images/raspberrypi_raspbian_config -c versions_override_config # Upload to temporary S3 bucket - mv deploy ${RASPBERRYPI_PLATFORM} - tar czf ${RASPBERRYPI_PLATFORM}.tar.gz ${RASPBERRYPI_PLATFORM} - aws s3 cp ${RASPBERRYPI_PLATFORM}.tar.gz s3://mender-gitlab-tmp-storage/$CI_PROJECT_NAME/$CI_PIPELINE_ID/${RASPBERRYPI_PLATFORM}.tar.gz convert_raspbian_raspberrypi3: <<: *convert_raspbian variables: RASPBERRYPI_PLATFORM: raspberrypi3 convert_raspbian_raspberrypi4: <<: *convert_raspbian variables: RASPBERRYPI_PLATFORM: raspberrypi4 .template_test_acceptance: &test_acceptance stage: test_acceptance needs: - job: build artifacts: true image: ubuntu:18.04 services: - docker:19.03-dind tags: - mender-qa-slave timeout: 2h before_script: - export AWS_ACCESS_KEY_ID=$TMP_STORAGE_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$TMP_STORAGE_AWS_SECRET_ACCESS_KEY # Install dependencies - apt update - apt install -qyy bash wget git util-linux mtools python3 python3-pip gcc python3-dev libffi-dev liblzo2-dev libc-dev libssl-dev make sudo awscli unzip qemu-system-x86 ovmf curl docker.io # Python3 dependencies - python3 -m pip install -U pip - pip3 install -r https://raw.githubusercontent.com/mendersoftware/meta-mender/master/tests/acceptance/requirements_py3.txt # Load image under test - export IMAGE_NAME=$DOCKER_REPOSITORY:pr - docker load -i image.tar # Set mender-image-tests submodule to correct version - git submodule update --init --recursive # Get mender-artifact for the tests - curl -f -O https://mender.s3.amazonaws.com/mender-artifact/$MENDER_ARTIFACT_VERSION/linux/mender-artifact - chmod ugo+x mender-artifact - mv mender-artifact /usr/bin/ artifacts: expire_in: 2w when: always paths: - results_*.xml - report_*.html reports: junit: results_*.xml .template_test_acceptance_prebuilt_raspberrypi: &test_acceptance_prebuilt_raspberrypi <<: *test_acceptance script: # Fetch artifacts from temporary S3 bucket - aws s3 cp s3://mender-gitlab-tmp-storage/$CI_PROJECT_NAME/$CI_PIPELINE_ID/${RASPBERRYPI_PLATFORM}.tar.gz ${RASPBERRYPI_PLATFORM}.tar.gz - tar xzf ${RASPBERRYPI_PLATFORM}.tar.gz - mv ${RASPBERRYPI_PLATFORM} deploy # Extract converted Raspbian artifacts - unxz deploy/${RASPBIAN_NAME}-${RASPBERRYPI_PLATFORM}-mender.img.xz - ./scripts/test/run-tests.sh --prebuilt-image raspberrypi ${RASPBIAN_NAME}-${RASPBERRYPI_PLATFORM}-mender test_acceptance_prebuilt_raspberrypi3: <<: *test_acceptance_prebuilt_raspberrypi needs: - job: build artifacts: true - job: convert_raspbian_raspberrypi3 artifacts: true variables: RASPBERRYPI_PLATFORM: raspberrypi3 test_acceptance_prebuilt_raspberrypi4: <<: *test_acceptance_prebuilt_raspberrypi needs: - job: build artifacts: true - job: convert_raspbian_raspberrypi4 artifacts: true variables: RASPBERRYPI_PLATFORM: raspberrypi4 test_acceptance_qemux86_64: <<: *test_acceptance script: - ./scripts/test/run-tests.sh --only qemux86_64 test_acceptance_raspberrypi: <<: *test_acceptance script: - ./scripts/test/run-tests.sh --only raspberrypi3 test_acceptance_linaro-alip: <<: *test_acceptance script: - ./scripts/test/run-tests.sh --only linaro-alip test_acceptance_beaglebone: <<: *test_acceptance script: - ./scripts/test/run-tests.sh --only beaglebone test_acceptance_ubuntu: <<: *test_acceptance script: - ./scripts/test/run-tests.sh --only ubuntu publish:s3: when: manual stage: publish image: debian:buster before_script: - export PUBLISH_AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID - export PUBLISH_AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY - export AWS_ACCESS_KEY_ID=$TMP_STORAGE_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$TMP_STORAGE_AWS_SECRET_ACCESS_KEY - apt update && apt install -yyq awscli # Fetch artifacts from temporary S3 bucket - for RASPBERRYPI_PLATFORM in raspberrypi3 raspberrypi4; do - aws s3 cp s3://mender-gitlab-tmp-storage/$CI_PROJECT_NAME/$CI_PIPELINE_ID/${RASPBERRYPI_PLATFORM}.tar.gz ${RASPBERRYPI_PLATFORM}.tar.gz - tar xzf ${RASPBERRYPI_PLATFORM}.tar.gz - done script: # Prepare high privilege S3 keys (the TMP_STORAGE keys are for the tmp storage only) - export AWS_ACCESS_KEY_ID=$PUBLISH_AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$PUBLISH_AWS_SECRET_ACCESS_KEY - for RASPBERRYPI_PLATFORM in raspberrypi3 raspberrypi4; do - PUBLISH_NAME=${RASPBIAN_NAME}-${RASPBERRYPI_PLATFORM}-mender-${MENDER_CLIENT_VERSION}.img.xz - echo "Publishing ${PUBLISH_NAME} version to S3" - aws s3 cp ${RASPBERRYPI_PLATFORM}/${RASPBIAN_NAME}-${RASPBERRYPI_PLATFORM}-mender.img.xz s3://$S3_BUCKET_NAME/${RASPBIAN_NAME}/arm/${PUBLISH_NAME} - aws s3api put-object-acl --acl public-read --bucket $S3_BUCKET_NAME --key ${RASPBIAN_NAME}/arm/${PUBLISH_NAME} - PUBLISH_NAME=${RASPBIAN_NAME}-${RASPBERRYPI_PLATFORM}-mender-${MENDER_CLIENT_VERSION}.mender - echo "Publishing ${PUBLISH_NAME} version to S3" - aws s3 cp ${RASPBERRYPI_PLATFORM}/${RASPBIAN_NAME}-${RASPBERRYPI_PLATFORM}-mender.mender s3://$S3_BUCKET_NAME/${RASPBIAN_NAME}/arm/${PUBLISH_NAME} - aws s3api put-object-acl --acl public-read --bucket $S3_BUCKET_NAME --key ${RASPBIAN_NAME}/arm/${PUBLISH_NAME} - done only: - /^(master|[0-9]+\.[0-9]+\.x)$/