| language: bash |
| |
| services: |
| - docker |
| env: |
| global: |
| - NAME="osixia/openldap" |
| - VERSION="${TRAVIS_BRANCH}-dev" |
| matrix: |
| - TARGET_ARCH=amd64 QEMU_ARCH=x86_64 |
| - TARGET_ARCH=arm32v7 QEMU_ARCH=arm |
| - TARGET_ARCH=arm64v8 QEMU_ARCH=aarch64 |
| |
| addons: |
| apt: |
| # The docker manifest command was added in docker-ee version 18.x |
| # So update our current installation and we also have to enable the experimental features. |
| sources: |
| - sourceline: "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" |
| key_url: "https://download.docker.com/linux/ubuntu/gpg" |
| packages: |
| - docker-ce |
| |
| before_install: |
| - docker --version |
| - mkdir $HOME/.docker |
| - 'echo "{" > $HOME/.docker/config.json' |
| - 'echo " \"experimental\": \"enabled\"" >> $HOME/.docker/config.json' |
| - 'echo "}" >> $HOME/.docker/config.json' |
| - sudo service docker restart |
| |
| install: |
| # For cross buidling our images |
| # This is necessary because travis-ci.org has only x86_64 machines. |
| # If travis-ci.org gets native arm builds, probably this step is not |
| # necessary any more. |
| - docker run --rm --privileged multiarch/qemu-user-static:register --reset |
| # Bats is necessary for the UT |
| - curl -o bats.tar.gz -SL https://github.com/bats-core/bats-core/archive/v1.1.0.tar.gz |
| - mkdir bats-core && tar -xf bats.tar.gz -C bats-core --strip-components=1 |
| - cd bats-core/ |
| - sudo ./install.sh /usr/local |
| - cd .. |
| |
| before_script: |
| # Set baseimage. |
| - sed -i -e "s/FROM \(.*\)/FROM \1-${TARGET_ARCH}/g" image/Dockerfile; |
| # remove pqchecker if arch is not amd64 |
| - if [[ "${TARGET_ARCH}" != 'amd64' ]]; then |
| sed -i -e "/PQCHECKER/Id" image/Dockerfile; |
| fi |
| - cat image/Dockerfile; |
| # If this is a tag then change the VERSION variable to only have the |
| # tag name and not also the commit hash. |
| - if [ -n "$TRAVIS_TAG" ]; then |
| VERSION=$(echo "${TRAVIS_TAG}" | sed -e 's/\(.*\)[-v]\(.*\)/\1\2/g'); |
| fi |
| - if [ "${TRAVIS_BRANCH}" == 'stable' ]; then |
| VERSION="stable"; |
| fi |
| |
| script: |
| - make build-nocache NAME=${NAME} VERSION=${VERSION}-${TARGET_ARCH} |
| # skip test "ldapsearch existing hdb database and config" if arch != amd64 |
| - if [[ "${TARGET_ARCH}" != 'amd64' ]]; then |
| sed -i '/@test "ldapsearch existing hdb database and config"/a skip' test/test.bats; |
| fi |
| # Run the test and if the test fails mark the build as failed. |
| - make test NAME=${NAME} VERSION=${VERSION}-${TARGET_ARCH} |
| |
| before_deploy: |
| - docker run -d --name test_image ${NAME}:${VERSION}-${TARGET_ARCH} sleep 10 |
| - sleep 5 |
| - sudo docker ps | grep -q test_image |
| # To have `DOCKER_USER` and `DOCKER_PASS` |
| # use `travis env set`. |
| - docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"; |
| - make tag NAME=${NAME} VERSION=${VERSION}-${TARGET_ARCH} |
| |
| deploy: |
| provider: script |
| on: |
| all_branches: true |
| script: make push NAME=${NAME} VERSION=${VERSION}-${TARGET_ARCH} |
| |
| jobs: |
| include: |
| - stage: Manifest creation |
| install: skip |
| script: skip |
| after_deploy: |
| - docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"; |
| - docker manifest create ${NAME}:${VERSION} ${NAME}:${VERSION}-amd64 ${NAME}:${VERSION}-arm32v7 ${NAME}:${VERSION}-arm64v8; |
| docker manifest annotate ${NAME}:${VERSION} ${NAME}:${VERSION}-amd64 --os linux --arch amd64; |
| docker manifest annotate ${NAME}:${VERSION} ${NAME}:${VERSION}-arm32v7 --os linux --arch arm --variant v7; |
| docker manifest annotate ${NAME}:${VERSION} ${NAME}:${VERSION}-arm64v8 --os linux --arch arm64 --variant v8; |
| |
| # The latest tag is coming from the stable branch of the repo |
| - if [ "${TRAVIS_BRANCH}" == 'stable' ]; then |
| docker manifest create ${NAME}:latest ${NAME}:${VERSION}-amd64 ${NAME}:${VERSION}-arm32v7 ${NAME}:${VERSION}-arm64v8; |
| docker manifest annotate ${NAME}:latest ${NAME}:${VERSION}-amd64 --os linux --arch amd64; |
| docker manifest annotate ${NAME}:latest ${NAME}:${VERSION}-arm32v7 --os linux --arch arm --variant v7; |
| docker manifest annotate ${NAME}:latest ${NAME}:${VERSION}-arm64v8 --os linux --arch arm64 --variant v8; |
| fi |
| |
| - docker manifest push ${NAME}:${VERSION}; |
| if [ "${TRAVIS_BRANCH}" == 'stable' ]; then |
| docker manifest push ${NAME}:latest; |
| fi |