--- # Based on https://gitlab.com/hassio-addons/addon-node-red/blob/master/.gitlab-ci.yml variables: DOCKER_DRIVER: overlay2 DOCKER_HOST: tcp://docker:2375/ BASE_VERSION: '2.1.1' TZ: UTC stages: - lint - test - deploy .lint: &lint image: esphome/esphome-lint:latest stage: lint before_script: - script/setup tags: - docker .test: &test image: esphome/esphome-lint:latest stage: test before_script: - script/setup tags: - docker .docker-base: &docker-base image: esphome/esphome-base-builder before_script: - docker info - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD" script: - docker run --rm --privileged multiarch/qemu-user-static:5.0.0-2 --reset -p yes - TAG="${CI_COMMIT_TAG#v}" - TAG="${TAG:-${CI_COMMIT_SHA:0:7}}" - echo "Tag ${TAG}" - | if [[ "${IS_HASSIO}" == "YES" ]]; then BUILD_FROM=esphome/esphome-hassio-base-${BUILD_ARCH}:${BASE_VERSION} BUILD_TO=esphome/esphome-hassio-${BUILD_ARCH} DOCKERFILE=docker/Dockerfile.hassio else BUILD_FROM=esphome/esphome-base-${BUILD_ARCH}:${BASE_VERSION} if [[ "${BUILD_ARCH}" == "amd64" ]]; then BUILD_TO=esphome/esphome else BUILD_TO=esphome/esphome-${BUILD_ARCH} fi DOCKERFILE=docker/Dockerfile fi - | docker build \ --build-arg "BUILD_FROM=${BUILD_FROM}" \ --build-arg "BUILD_VERSION=${TAG}" \ --tag "${BUILD_TO}:${TAG}" \ --file "${DOCKERFILE}" \ . - | if [[ "${RELEASE}" = "YES" ]]; then echo "Pushing to ${BUILD_TO}:${TAG}" docker push "${BUILD_TO}:${TAG}" fi - | if [[ "${LATEST}" = "YES" ]]; then echo "Pushing to :latest" docker tag ${BUILD_TO}:${TAG} ${BUILD_TO}:latest docker push ${BUILD_TO}:latest fi - | if [[ "${BETA}" = "YES" ]]; then echo "Pushing to :beta" docker tag \ ${BUILD_TO}:${TAG} \ ${BUILD_TO}:beta docker push ${BUILD_TO}:beta fi - | if [[ "${DEV}" = "YES" ]]; then echo "Pushing to :dev" docker tag \ ${BUILD_TO}:${TAG} \ ${BUILD_TO}:dev docker push ${BUILD_TO}:dev fi services: - docker:dind tags: - docker stage: deploy lint-custom: <<: *lint script: - script/ci-custom.py lint-python: <<: *lint script: - script/lint-python lint-tidy: <<: *lint script: - pio init --ide atom - script/clang-tidy --all-headers --fix - script/ci-suggest-changes lint-format: <<: *lint script: - script/clang-format -i - script/ci-suggest-changes test1: <<: *test script: - esphome tests/test1.yaml compile test2: <<: *test script: - esphome tests/test2.yaml compile test3: <<: *test script: - esphome tests/test3.yaml compile test4: <<: *test script: - esphome tests/test3.yaml compile .deploy-pypi: &deploy-pypi <<: *lint stage: deploy script: - pip install twine wheel - python setup.py sdist bdist_wheel - twine upload dist/* deploy-release:pypi: <<: *deploy-pypi only: - /^v\d+\.\d+\.\d+$/ except: - /^(?!master).+@/ deploy-beta:pypi: <<: *deploy-pypi only: - /^v\d+\.\d+\.\d+b\d+$/ except: - /^(?!rc).+@/ .latest: &latest <<: *docker-base only: - /^v([0-9\.]+)$/ except: - branches .beta: &beta <<: *docker-base only: - /^v([0-9\.]+b\d+)$/ except: - branches .dev: &dev <<: *docker-base only: - dev aarch64-beta-docker: <<: *beta variables: BETA: "YES" BUILD_ARCH: aarch64 IS_HASSIO: "NO" RELEASE: "YES" aarch64-beta-hassio: <<: *beta variables: BETA: "YES" BUILD_ARCH: aarch64 IS_HASSIO: "YES" RELEASE: "YES" aarch64-dev-docker: <<: *dev variables: BUILD_ARCH: aarch64 DEV: "YES" IS_HASSIO: "NO" aarch64-dev-hassio: <<: *dev variables: BUILD_ARCH: aarch64 DEV: "YES" IS_HASSIO: "YES" aarch64-latest-docker: <<: *latest variables: BETA: "YES" BUILD_ARCH: aarch64 IS_HASSIO: "NO" LATEST: "YES" RELEASE: "YES" aarch64-latest-hassio: <<: *latest variables: BETA: "YES" BUILD_ARCH: aarch64 IS_HASSIO: "YES" LATEST: "YES" RELEASE: "YES" amd64-beta-docker: <<: *beta variables: BETA: "YES" BUILD_ARCH: amd64 IS_HASSIO: "NO" RELEASE: "YES" amd64-beta-hassio: <<: *beta variables: BETA: "YES" BUILD_ARCH: amd64 IS_HASSIO: "YES" RELEASE: "YES" amd64-dev-docker: <<: *dev variables: BUILD_ARCH: amd64 DEV: "YES" IS_HASSIO: "NO" amd64-dev-hassio: <<: *dev variables: BUILD_ARCH: amd64 DEV: "YES" IS_HASSIO: "YES" amd64-latest-docker: <<: *latest variables: BETA: "YES" BUILD_ARCH: amd64 IS_HASSIO: "NO" LATEST: "YES" RELEASE: "YES" amd64-latest-hassio: <<: *latest variables: BETA: "YES" BUILD_ARCH: amd64 IS_HASSIO: "YES" LATEST: "YES" RELEASE: "YES" armv7-beta-docker: <<: *beta variables: BETA: "YES" BUILD_ARCH: armv7 IS_HASSIO: "NO" RELEASE: "YES" armv7-beta-hassio: <<: *beta variables: BETA: "YES" BUILD_ARCH: armv7 IS_HASSIO: "YES" RELEASE: "YES" armv7-dev-docker: <<: *dev variables: BUILD_ARCH: armv7 DEV: "YES" IS_HASSIO: "NO" armv7-dev-hassio: <<: *dev variables: BUILD_ARCH: armv7 DEV: "YES" IS_HASSIO: "YES" armv7-latest-docker: <<: *latest variables: BETA: "YES" BUILD_ARCH: armv7 IS_HASSIO: "NO" LATEST: "YES" RELEASE: "YES" armv7-latest-hassio: <<: *latest variables: BETA: "YES" BUILD_ARCH: armv7 IS_HASSIO: "YES" LATEST: "YES" RELEASE: "YES" i386-beta-docker: <<: *beta variables: BETA: "YES" BUILD_ARCH: i386 IS_HASSIO: "NO" RELEASE: "YES" i386-beta-hassio: <<: *beta variables: BETA: "YES" BUILD_ARCH: i386 IS_HASSIO: "YES" RELEASE: "YES" i386-dev-docker: <<: *dev variables: BUILD_ARCH: i386 DEV: "YES" IS_HASSIO: "NO" i386-dev-hassio: <<: *dev variables: BUILD_ARCH: i386 DEV: "YES" IS_HASSIO: "YES" i386-latest-docker: <<: *latest variables: BETA: "YES" BUILD_ARCH: i386 IS_HASSIO: "NO" LATEST: "YES" RELEASE: "YES" i386-latest-hassio: <<: *latest variables: BETA: "YES" BUILD_ARCH: i386 IS_HASSIO: "YES" LATEST: "YES" RELEASE: "YES"