You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

285 lines
9.3 KiB

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: 3.5.x
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-2021-01-12/2021-01-11-raspios-buster-armhf-lite.zip
RASPBIAN_NAME: 2021-01-11-raspios-buster-armhf-lite
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 --ignore-installed -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)$/