mirror of
https://github.com/esphome/esphome.git
synced 2025-09-02 11:22:24 +01:00
GH Actions Update (#1134)
This commit is contained in:
196
.github/workflows/ci.yml
vendored
Normal file
196
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,196 @@
|
||||
# THESE JOBS ARE COPIED IN release.yml and release-dev.yml
|
||||
# PLEASE ALSO UPDATE THOSE FILES WHEN CHANGING LINES HERE
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
# On dev branch release-dev already performs CI checks
|
||||
# On other branches the `pull_request` trigger will be used
|
||||
branches: [beta, master]
|
||||
|
||||
pull_request:
|
||||
# Only trigger on certain events (not when comments are added)
|
||||
types: [opened, reopened, synchronize]
|
||||
# Only run when PR is against dev branch (all PRs should be against dev branch)
|
||||
# Helps prevent accidentally merging PRs against master branch
|
||||
branches: [dev]
|
||||
|
||||
jobs:
|
||||
# A fast overview job that checks only changed files
|
||||
overview:
|
||||
runs-on: ubuntu-latest
|
||||
container: esphome/esphome-lint:dev
|
||||
steps:
|
||||
# Also fetch history and dev branch so that we can check which files changed
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Fetch dev branch
|
||||
run: git fetch origin dev
|
||||
|
||||
# Cache the .pio directory with (primarily) library dependencies
|
||||
- name: Cache .pio lib_deps
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: .pio
|
||||
key: lint-cpp-pio-${{ hashFiles('platformio.ini') }}
|
||||
restore-keys: |
|
||||
lint-cpp-pio-
|
||||
- name: Set up python environment
|
||||
run: script/setup
|
||||
# Set up the pio project so that the cpp checks know how files are compiled
|
||||
# (build flags, libraries etc)
|
||||
- name: Set up platformio environment
|
||||
run: pio init --ide atom
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/ci-custom.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/clang-tidy.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/gcc.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/lint-python.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/python.json"
|
||||
- name: Run a quick lint over all changed files
|
||||
run: script/quicklint
|
||||
- name: Suggest changes
|
||||
run: script/ci-suggest-changes
|
||||
|
||||
lint-clang-format:
|
||||
runs-on: ubuntu-latest
|
||||
# cpp lint job runs with esphome-lint docker image so that clang-format-*
|
||||
# doesn't have to be installed
|
||||
container: esphome/esphome-lint:dev
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
# Cache platformio intermediary files (like libraries etc)
|
||||
# Note: platformio platform versions should be cached via the esphome-lint image
|
||||
- name: Cache Platformio
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: .pio
|
||||
key: lint-cpp-pio-${{ hashFiles('platformio.ini') }}
|
||||
restore-keys: |
|
||||
lint-cpp-pio-
|
||||
# Set up the pio project so that the cpp checks know how files are compiled
|
||||
# (build flags, libraries etc)
|
||||
- name: Set up platformio environment
|
||||
run: pio init --ide atom
|
||||
|
||||
- name: Run clang-format
|
||||
run: script/clang-format -i
|
||||
- name: Suggest changes
|
||||
run: script/ci-suggest-changes
|
||||
|
||||
lint-clang-tidy:
|
||||
runs-on: ubuntu-latest
|
||||
# cpp lint job runs with esphome-lint docker image so that clang-format-*
|
||||
# doesn't have to be installed
|
||||
container: esphome/esphome-lint:dev
|
||||
# Split clang-tidy check into 4 jobs. Each one will check 1/4th of the .cpp files
|
||||
strategy:
|
||||
matrix:
|
||||
split: [1, 2, 3, 4]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
# Cache platformio intermediary files (like libraries etc)
|
||||
# Note: platformio platform versions should be cached via the esphome-lint image
|
||||
- name: Cache Platformio
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: .pio
|
||||
key: lint-cpp-pio-${{ hashFiles('platformio.ini') }}
|
||||
restore-keys: |
|
||||
lint-cpp-pio-
|
||||
# Set up the pio project so that the cpp checks know how files are compiled
|
||||
# (build flags, libraries etc)
|
||||
- name: Set up platformio environment
|
||||
run: pio init --ide atom
|
||||
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/clang-tidy.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/gcc.json"
|
||||
- name: Run clang-tidy
|
||||
run: script/clang-tidy --all-headers --fix --split-num 4 --split-at ${{ matrix.split }}
|
||||
- name: Suggest changes
|
||||
run: script/ci-suggest-changes
|
||||
|
||||
lint-python:
|
||||
# Don't use the esphome-lint docker image because it may contain outdated requirements.
|
||||
# This way, all dependencies are cached via the cache action.
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.7'
|
||||
- name: Cache pip modules
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: esphome-pip-3.7-${{ hashFiles('setup.py') }}
|
||||
restore-keys: |
|
||||
esphome-pip-3.7-
|
||||
- name: Set up python environment
|
||||
run: script/setup
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/ci-custom.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/lint-python.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/python.json"
|
||||
- name: Lint Custom
|
||||
run: script/ci-custom.py
|
||||
- name: Lint Python
|
||||
run: script/lint-python
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
test:
|
||||
- test1
|
||||
- test2
|
||||
- test3
|
||||
- test4
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.7'
|
||||
- name: Cache pip modules
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: esphome-pip-3.7-${{ hashFiles('setup.py') }}
|
||||
restore-keys: |
|
||||
esphome-pip-3.7-
|
||||
# Use per test platformio cache because tests have different platform versions
|
||||
- name: Cache ~/.platformio
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.platformio
|
||||
key: test-home-platformio-${{ matrix.test }}-${{ hashFiles('esphome/core_config.py') }}
|
||||
restore-keys: |
|
||||
test-home-platformio-${{ matrix.test }}-
|
||||
# Cache the intermediary build files
|
||||
- name: Cache Test Build
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: tests/build/${{ matrix.test }}
|
||||
key: test-pio-${{ matrix.test }}-${{ hashFiles('esphome/core_config.py') }}-${{ hashFiles('esphome/**') }}
|
||||
restore-keys: |
|
||||
test-pio-${{ matrix.test }}-${{ hashFiles('esphome/core_config.py') }}-
|
||||
test-pio-${{ matrix.test }}-
|
||||
- name: Set up environment
|
||||
run: script/setup
|
||||
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/gcc.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/python.json"
|
||||
- run: esphome tests/${{ matrix.test }}.yaml compile
|
16
.github/workflows/matchers/ci-custom.json
vendored
Normal file
16
.github/workflows/matchers/ci-custom.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "ci-custom",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^ERROR (.*):(\\d+):(\\d+) - (.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"message": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
17
.github/workflows/matchers/clang-tidy.json
vendored
Normal file
17
.github/workflows/matchers/clang-tidy.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "clang-tidy",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(.*):(\\d+):(\\d+):\\s+(error):\\s+(.*) \\[([a-z0-9,\\-]+)\\]\\s*$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"severity": 4,
|
||||
"message": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
18
.github/workflows/matchers/gcc.json
vendored
Normal file
18
.github/workflows/matchers/gcc.json
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "gcc",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(.*):(\\d+):(\\d+):\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"severity": 4,
|
||||
"message": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
28
.github/workflows/matchers/lint-python.json
vendored
Normal file
28
.github/workflows/matchers/lint-python.json
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "flake8",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(.*):(\\d+) - ([EFCDNW]\\d{3}.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"message": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "pylint",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(.*):(\\d+) - (\\[[EFCRW]\\d{4}\\(.*\\),.*\\].*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"message": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
18
.github/workflows/matchers/python.json
vendored
Normal file
18
.github/workflows/matchers/python.json
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "python",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^\\s*File\\s\\\"(.*)\\\",\\sline\\s(\\d+),\\sin\\s(.*)$",
|
||||
"file": 1,
|
||||
"line": 2
|
||||
},
|
||||
{
|
||||
"regexp": "^\\s*raise\\s(.*)\\(\\'(.*)\\'\\)$",
|
||||
"message": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
59
.github/workflows/pull.yaml
vendored
59
.github/workflows/pull.yaml
vendored
@@ -1,59 +0,0 @@
|
||||
name: PR testing
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
lint-custom:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Custom
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: script/ci-custom.py
|
||||
lint-python:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Python
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: script/lint-python
|
||||
lint-tidy:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Tidy
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- run: script/setup
|
||||
- run: pio init --ide atom
|
||||
- run: script/clang-tidy --all-headers --fix
|
||||
- run: script/ci-suggest-changes
|
||||
lint-format:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Format
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- run: script/setup
|
||||
- run: script/clang-format -i
|
||||
- run: script/ci-suggest-changes
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
strategy:
|
||||
matrix:
|
||||
test:
|
||||
- test1
|
||||
- test2
|
||||
- test3
|
||||
- test4
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: esphome tests/${{ matrix.test }}.yaml compile
|
124
.github/workflows/release-dev.yaml
vendored
124
.github/workflows/release-dev.yaml
vendored
@@ -1,124 +0,0 @@
|
||||
name: Release dev
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
lint-custom:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Custom
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: script/ci-custom.py
|
||||
lint-python:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Python
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: script/lint-python
|
||||
lint-tidy:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Tidy
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: pio init --ide atom
|
||||
- run: script/clang-tidy --all-headers --fix
|
||||
- run: script/ci-suggest-changes
|
||||
lint-format:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Format
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: script/clang-format -i
|
||||
- run: script/ci-suggest-changes
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
strategy:
|
||||
matrix:
|
||||
test:
|
||||
- test1
|
||||
- test2
|
||||
- test3
|
||||
- test4
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: esphome tests/${{ matrix.test }}.yaml compile
|
||||
|
||||
deploy-docker:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint-custom, lint-python, lint-tidy, lint-format, test]
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [aarch64, amd64, armv7, i386]
|
||||
build-type: [hassio, docker]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: docker info
|
||||
- run: docker login -u "${DOCKER_USER}" -p "${DOCKER_PASSWORD}"
|
||||
env:
|
||||
DOCKER_USER: ${{ secrets.DOCKER_USER }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- run: docker run --rm --privileged multiarch/qemu-user-static:5.0.0-2 --reset -p yes
|
||||
- env:
|
||||
BASE_VERSION: 2.1.1
|
||||
run: |
|
||||
if [[ "${{ matrix.build-type }}" == "hassio" ]]; then
|
||||
BUILD_FROM=esphome/esphome-hassio-base-${{ matrix.arch }}:${BASE_VERSION}
|
||||
BUILD_TO=${{ github.repository }}-hassio-${{ matrix.arch }}
|
||||
DOCKERFILE=docker/Dockerfile.hassio
|
||||
else
|
||||
BUILD_FROM=esphome/esphome-base-${{ matrix.arch }}:${BASE_VERSION}
|
||||
BUILD_TO=${{ github.repository }}-${{ matrix.arch }}
|
||||
DOCKERFILE=docker/Dockerfile
|
||||
fi
|
||||
|
||||
TAG=${{ github.sha }}
|
||||
TAG=${TAG:0:7}
|
||||
|
||||
echo "Building tag: ${TAG}"
|
||||
|
||||
docker build \
|
||||
--build-arg BUILD_FROM=${BUILD_FROM} \
|
||||
--build-arg BUILD_VERSION=${TAG} \
|
||||
--tag ${BUILD_TO}:dev \
|
||||
--file ${DOCKERFILE} \
|
||||
.
|
||||
|
||||
echo "Pushing to ${BUILD_TO}:dev"
|
||||
docker push ${BUILD_TO}:dev
|
||||
|
||||
deploy-docker-manifest-version:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [deploy-docker]
|
||||
steps:
|
||||
- run: mkdir -p ~/.docker
|
||||
- run: |
|
||||
echo "{\"experimental\": \"enabled\"}" > ~/.docker/config.json
|
||||
- run: docker login -u "${DOCKER_USER}" -p "${DOCKER_PASSWORD}"
|
||||
env:
|
||||
DOCKER_USER: ${{ secrets.DOCKER_USER }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- run: |
|
||||
REPO=${{ github.repository }}
|
||||
|
||||
docker manifest create ${REPO}:dev \
|
||||
${REPO}-aarch64:dev \
|
||||
${REPO}-amd64:dev \
|
||||
${REPO}-armv7:dev \
|
||||
${REPO}-i386:dev
|
||||
|
||||
echo "Pushing to ${REPO}:dev"
|
||||
docker manifest push ${REPO}:dev
|
226
.github/workflows/release-dev.yml
vendored
Normal file
226
.github/workflows/release-dev.yml
vendored
Normal file
@@ -0,0 +1,226 @@
|
||||
name: Publish dev releases to docker hub
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
# THE LINT/TEST JOBS ARE COPIED FROM ci.yaml
|
||||
|
||||
lint-clang-format:
|
||||
runs-on: ubuntu-latest
|
||||
# cpp lint job runs with esphome-lint docker image so that clang-format-*
|
||||
# doesn't have to be installed
|
||||
container: esphome/esphome-lint:dev
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
# Cache platformio intermediary files (like libraries etc)
|
||||
# Note: platformio platform versions should be cached via the esphome-lint image
|
||||
- name: Cache Platformio
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: .pio
|
||||
key: lint-cpp-pio-${{ hashFiles('platformio.ini') }}
|
||||
restore-keys: |
|
||||
lint-cpp-pio-
|
||||
# Set up the pio project so that the cpp checks know how files are compiled
|
||||
# (build flags, libraries etc)
|
||||
- name: Set up platformio environment
|
||||
run: pio init --ide atom
|
||||
|
||||
- name: Run clang-format
|
||||
run: script/clang-format -i
|
||||
- name: Suggest changes
|
||||
run: script/ci-suggest-changes
|
||||
|
||||
lint-clang-tidy:
|
||||
runs-on: ubuntu-latest
|
||||
# cpp lint job runs with esphome-lint docker image so that clang-format-*
|
||||
# doesn't have to be installed
|
||||
container: esphome/esphome-lint:dev
|
||||
# Split clang-tidy check into 4 jobs. Each one will check 1/4th of the .cpp files
|
||||
strategy:
|
||||
matrix:
|
||||
split: [1, 2, 3, 4]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
# Cache platformio intermediary files (like libraries etc)
|
||||
# Note: platformio platform versions should be cached via the esphome-lint image
|
||||
- name: Cache Platformio
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: .pio
|
||||
key: lint-cpp-pio-${{ hashFiles('platformio.ini') }}
|
||||
restore-keys: |
|
||||
lint-cpp-pio-
|
||||
# Set up the pio project so that the cpp checks know how files are compiled
|
||||
# (build flags, libraries etc)
|
||||
- name: Set up platformio environment
|
||||
run: pio init --ide atom
|
||||
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/clang-tidy.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/gcc.json"
|
||||
- name: Run clang-tidy
|
||||
run: script/clang-tidy --all-headers --fix --split-num 4 --split-at ${{ matrix.split }}
|
||||
- name: Suggest changes
|
||||
run: script/ci-suggest-changes
|
||||
|
||||
lint-python:
|
||||
# Don't use the esphome-lint docker image because it may contain outdated requirements.
|
||||
# This way, all dependencies are cached via the cache action.
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.7'
|
||||
- name: Cache pip modules
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: esphome-pip-3.7-${{ hashFiles('setup.py') }}
|
||||
restore-keys: |
|
||||
esphome-pip-3.7-
|
||||
- name: Set up python environment
|
||||
run: script/setup
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/ci-custom.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/lint-python.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/python.json"
|
||||
- name: Lint Custom
|
||||
run: script/ci-custom.py
|
||||
- name: Lint Python
|
||||
run: script/lint-python
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
test:
|
||||
- test1
|
||||
- test2
|
||||
- test3
|
||||
- test4
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.7'
|
||||
- name: Cache pip modules
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: esphome-pip-3.7-${{ hashFiles('setup.py') }}
|
||||
restore-keys: |
|
||||
esphome-pip-3.7-
|
||||
# Use per test platformio cache because tests have different platform versions
|
||||
- name: Cache ~/.platformio
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.platformio
|
||||
key: test-home-platformio-${{ matrix.test }}-${{ hashFiles('esphome/core_config.py') }}
|
||||
restore-keys: |
|
||||
test-home-platformio-${{ matrix.test }}-
|
||||
# Cache the intermediary build files
|
||||
- name: Cache Test Build
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: tests/build/${{ matrix.test }}
|
||||
key: test-pio-${{ matrix.test }}-${{ hashFiles('esphome/core_config.py') }}-${{ hashFiles('esphome/**') }}
|
||||
restore-keys: |
|
||||
test-pio-${{ matrix.test }}-${{ hashFiles('esphome/core_config.py') }}-
|
||||
test-pio-${{ matrix.test }}-
|
||||
- name: Set up environment
|
||||
run: script/setup
|
||||
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/gcc.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/python.json"
|
||||
- run: esphome tests/${{ matrix.test }}.yaml compile
|
||||
|
||||
deploy-docker:
|
||||
name: Build and publish docker containers
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint-clang-format, lint-clang-tidy, lint-python, test]
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64, i386, armv7, aarch64]
|
||||
build_type: ["hassio", "docker"]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up env variables
|
||||
run: |
|
||||
tag="dev"
|
||||
base_version="2.1.2"
|
||||
|
||||
if [[ "${{ matrix.build_type }}" == "hassio" ]]; then
|
||||
build_from="esphome/esphome-hassio-base-${{ matrix.arch }}:${base_version}"
|
||||
build_to="esphome/esphome-hassio-${{ matrix.arch }}"
|
||||
dockerfile="docker/Dockerfile.hassio"
|
||||
else
|
||||
build_from="esphome/esphome-base-${{ matrix.arch }}:${base_version}"
|
||||
build_to="esphome/esphome-${{ matrix.arch }}"
|
||||
dockerfile="docker/Dockerfile"
|
||||
if [[ "${{ matrix.arch }}" == "amd64" ]]; then
|
||||
build_to="esphome/esphome"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set env variables so these values don't need to be calculated again
|
||||
echo "::set-env name=TAG::${tag}"
|
||||
echo "::set-env name=BUILD_FROM::${build_from}"
|
||||
echo "::set-env name=BUILD_TO::${build_to}"
|
||||
echo "::set-env name=IMAGE::${build_to}:${tag}"
|
||||
echo "::set-env name=DOCKERFILE::${dockerfile}"
|
||||
- name: Register QEMU binfmt
|
||||
run: docker run --rm --privileged multiarch/qemu-user-static:5.0.0-2 --reset -p yes
|
||||
- run: |
|
||||
docker build \
|
||||
--build-arg "BUILD_FROM=${BUILD_FROM}" \
|
||||
--build-arg "BUILD_VERSION=${TAG}" \
|
||||
--tag "${IMAGE}" \
|
||||
--file "${DOCKERFILE}" \
|
||||
.
|
||||
- name: Log in to docker hub
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
run: docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
|
||||
- run: docker push "${IMAGE}"
|
||||
|
||||
deploy-docker-manifest:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [deploy-docker]
|
||||
steps:
|
||||
- name: Enable experimental manifest support
|
||||
run: |
|
||||
mkdir -p ~/.docker
|
||||
echo "{\"experimental\": \"enabled\"}" > ~/.docker/config.json
|
||||
- name: Log in to docker hub
|
||||
env:
|
||||
DOCKER_USER: ${{ secrets.DOCKER_USER }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
run: docker login -u "${DOCKER_USER}" -p "${DOCKER_PASSWORD}"
|
||||
- name: "Create the manifest"
|
||||
run: |
|
||||
REPO=esphome/esphome
|
||||
TAG="dev"
|
||||
|
||||
docker manifest create ${REPO}:${TAG} \
|
||||
${REPO}-aarch64:${TAG} \
|
||||
${REPO}-amd64:${TAG} \
|
||||
${REPO}-armv7:${TAG} \
|
||||
${REPO}-i386:${TAG}
|
||||
echo "::set-env name=TAG::${TAG}"
|
||||
echo "::set-env name=REPO::${REPO}"
|
||||
- run: docker push ${REPO}:${TAG}
|
180
.github/workflows/release-version.yaml
vendored
180
.github/workflows/release-version.yaml
vendored
@@ -1,180 +0,0 @@
|
||||
name: Release a version
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "*"
|
||||
|
||||
jobs:
|
||||
lint-custom:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Custom
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: script/ci-custom.py
|
||||
lint-python:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Python
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: script/lint-python
|
||||
lint-tidy:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Tidy
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: pio init --ide atom
|
||||
- run: script/clang-tidy --all-headers --fix
|
||||
- run: script/ci-suggest-changes
|
||||
lint-format:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
name: Lint Format
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: script/clang-format -i
|
||||
- run: script/ci-suggest-changes
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
strategy:
|
||||
matrix:
|
||||
test:
|
||||
- test1
|
||||
- test2
|
||||
- test3
|
||||
- test4
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: script/setup
|
||||
- run: esphome tests/${{ matrix.test }}.yaml compile
|
||||
|
||||
deploy-pypi:
|
||||
runs-on: ubuntu-latest
|
||||
container: jesserockz/esphome-lint
|
||||
needs: [lint-custom, lint-python, lint-tidy, lint-format, test]
|
||||
steps:
|
||||
- run: pip install twine wheel
|
||||
- run: python setup.py sdist bdist_wheel
|
||||
- run: twine upload dist/*
|
||||
env:
|
||||
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
|
||||
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
|
||||
|
||||
deploy-docker:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint-custom, lint-python, lint-tidy, lint-format, test]
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [aarch64, amd64, armv7, i386]
|
||||
build-type: [hassio, docker]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: docker info
|
||||
- run: docker login -u "${DOCKER_USER}" -p "${DOCKER_PASSWORD}"
|
||||
env:
|
||||
DOCKER_USER: ${{ secrets.DOCKER_USER }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- run: docker run --rm --privileged multiarch/qemu-user-static:5.0.0-2 --reset -p yes
|
||||
- env:
|
||||
BASE_VERSION: 2.1.1
|
||||
run: |
|
||||
if [[ "${{ matrix.build-type }}" == "hassio" ]]; then
|
||||
BUILD_FROM=esphome/esphome-hassio-base-${{ matrix.arch }}:${BASE_VERSION}
|
||||
BUILD_TO=${{ github.repository }}-hassio-${{ matrix.arch }}
|
||||
DOCKERFILE=docker/Dockerfile.hassio
|
||||
else
|
||||
BUILD_FROM=esphome/esphome-base-${{ matrix.arch }}:${BASE_VERSION}
|
||||
BUILD_TO=${{ github.repository }}-${{ matrix.arch }}
|
||||
DOCKERFILE=docker/Dockerfile
|
||||
fi
|
||||
|
||||
TAG=${{ github.ref }}
|
||||
TAG=${TAG#refs/tags/v}
|
||||
|
||||
echo "Building tag: ${TAG}"
|
||||
|
||||
docker build \
|
||||
--build-arg BUILD_FROM=${BUILD_FROM} \
|
||||
--build-arg BUILD_VERSION=${TAG} \
|
||||
--tag ${BUILD_TO}:${TAG} \
|
||||
--file ${DOCKERFILE} \
|
||||
.
|
||||
|
||||
echo "Pushing to ${BUILD_TO}:${TAG}"
|
||||
docker push ${BUILD_TO}:${TAG}
|
||||
|
||||
beta_tag="^v\d+\.\d+\.\d+b\d+$"
|
||||
if [[ "${TAG}" ~= "${beta_tag}" ]]; then
|
||||
echo "Pushing to ${BUILD_TO}:beta"
|
||||
docker tag ${BUILD_TO}:${TAG} ${BUILD_TO}:beta
|
||||
docker push ${BUILD_TO}:beta
|
||||
else
|
||||
echo "Pushing to ${BUILD_TO}:latest"
|
||||
docker tag ${BUILD_TO}:${TAG} ${BUILD_TO}:latest
|
||||
docker push ${BUILD_TO}:latest
|
||||
fi
|
||||
|
||||
deploy-docker-manifest-version:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: mkdir -p ~/.docker
|
||||
- run: |
|
||||
echo "{\"experimental\": \"enabled\"}" > ~/.docker/config.json
|
||||
- run: docker login -u "${DOCKER_USER}" -p "${DOCKER_PASSWORD}"
|
||||
env:
|
||||
DOCKER_USER: ${{ secrets.DOCKER_USER }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- run: |
|
||||
REPO=${{ github.repository }}
|
||||
|
||||
TAG=${{ github.ref }}
|
||||
TAG=${TAG#refs/tags/v}
|
||||
|
||||
docker manifest create ${REPO}:${TAG} \
|
||||
${REPO}-aarch64:${TAG} \
|
||||
${REPO}-amd64:${TAG} \
|
||||
${REPO}-armv7:${TAG} \
|
||||
${REPO}-i386:${TAG}
|
||||
|
||||
echo "Pushing to ${REPO}:${TAG}"
|
||||
docker push ${REPO}:${TAG}
|
||||
|
||||
deploy-docker-manifest:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: mkdir -p ~/.docker
|
||||
- run: |
|
||||
echo "{\"experimental\": \"enabled\"}" > ~/.docker/config.json
|
||||
- run: docker login -u "${DOCKER_USER}" -p "${DOCKER_PASSWORD}"
|
||||
env:
|
||||
DOCKER_USER: ${{ secrets.DOCKER_USER }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- run: |
|
||||
REPO=${{ github.repository }}
|
||||
|
||||
TAG=${{ github.ref }}
|
||||
TAG=${TAG#refs/tags/v}
|
||||
|
||||
beta_tag="^v\d+\.\d+\.\d+b\d+$"
|
||||
if [[ "${TAG}" ~= "${beta_tag}" ]]; then
|
||||
TAG=beta
|
||||
else
|
||||
TAG=latest
|
||||
fi
|
||||
docker manifest create ${REPO}:${TAG} \
|
||||
${REPO}-aarch64:${TAG} \
|
||||
${REPO}-amd64:${TAG} \
|
||||
${REPO}-armv7:${TAG} \
|
||||
${REPO}-i386:${TAG}
|
||||
|
||||
echo "Pushing to ${REPO}:${TAG}"
|
||||
docker push ${REPO}:${TAG}
|
276
.github/workflows/release.yml
vendored
Normal file
276
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,276 @@
|
||||
name: Publish Release
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
# THE LINT/TEST JOBS ARE COPIED FROM ci.yaml
|
||||
|
||||
lint-clang-format:
|
||||
runs-on: ubuntu-latest
|
||||
# cpp lint job runs with esphome-lint docker image so that clang-format-*
|
||||
# doesn't have to be installed
|
||||
container: esphome/esphome-lint:dev
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
# Cache platformio intermediary files (like libraries etc)
|
||||
# Note: platformio platform versions should be cached via the esphome-lint image
|
||||
- name: Cache Platformio
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: .pio
|
||||
key: lint-cpp-pio-${{ hashFiles('platformio.ini') }}
|
||||
restore-keys: |
|
||||
lint-cpp-pio-
|
||||
# Set up the pio project so that the cpp checks know how files are compiled
|
||||
# (build flags, libraries etc)
|
||||
- name: Set up platformio environment
|
||||
run: pio init --ide atom
|
||||
|
||||
- name: Run clang-format
|
||||
run: script/clang-format -i
|
||||
- name: Suggest changes
|
||||
run: script/ci-suggest-changes
|
||||
|
||||
lint-clang-tidy:
|
||||
runs-on: ubuntu-latest
|
||||
# cpp lint job runs with esphome-lint docker image so that clang-format-*
|
||||
# doesn't have to be installed
|
||||
container: esphome/esphome-lint:dev
|
||||
# Split clang-tidy check into 4 jobs. Each one will check 1/4th of the .cpp files
|
||||
strategy:
|
||||
matrix:
|
||||
split: [1, 2, 3, 4]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
# Cache platformio intermediary files (like libraries etc)
|
||||
# Note: platformio platform versions should be cached via the esphome-lint image
|
||||
- name: Cache Platformio
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: .pio
|
||||
key: lint-cpp-pio-${{ hashFiles('platformio.ini') }}
|
||||
restore-keys: |
|
||||
lint-cpp-pio-
|
||||
# Set up the pio project so that the cpp checks know how files are compiled
|
||||
# (build flags, libraries etc)
|
||||
- name: Set up platformio environment
|
||||
run: pio init --ide atom
|
||||
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/clang-tidy.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/gcc.json"
|
||||
- name: Run clang-tidy
|
||||
run: script/clang-tidy --all-headers --fix --split-num 4 --split-at ${{ matrix.split }}
|
||||
- name: Suggest changes
|
||||
run: script/ci-suggest-changes
|
||||
|
||||
lint-python:
|
||||
# Don't use the esphome-lint docker image because it may contain outdated requirements.
|
||||
# This way, all dependencies are cached via the cache action.
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.7'
|
||||
- name: Cache pip modules
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: esphome-pip-3.7-${{ hashFiles('setup.py') }}
|
||||
restore-keys: |
|
||||
esphome-pip-3.7-
|
||||
- name: Set up python environment
|
||||
run: script/setup
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/ci-custom.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/lint-python.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/python.json"
|
||||
- name: Lint Custom
|
||||
run: script/ci-custom.py
|
||||
- name: Lint Python
|
||||
run: script/lint-python
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
test:
|
||||
- test1
|
||||
- test2
|
||||
- test3
|
||||
- test4
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.7'
|
||||
- name: Cache pip modules
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: esphome-pip-3.7-${{ hashFiles('setup.py') }}
|
||||
restore-keys: |
|
||||
esphome-pip-3.7-
|
||||
# Use per test platformio cache because tests have different platform versions
|
||||
- name: Cache ~/.platformio
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.platformio
|
||||
key: test-home-platformio-${{ matrix.test }}-${{ hashFiles('esphome/core_config.py') }}
|
||||
restore-keys: |
|
||||
test-home-platformio-${{ matrix.test }}-
|
||||
# Cache the intermediary build files
|
||||
- name: Cache Test Build
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: tests/build/${{ matrix.test }}
|
||||
key: test-pio-${{ matrix.test }}-${{ hashFiles('esphome/core_config.py') }}-${{ hashFiles('esphome/**') }}
|
||||
restore-keys: |
|
||||
test-pio-${{ matrix.test }}-${{ hashFiles('esphome/core_config.py') }}-
|
||||
test-pio-${{ matrix.test }}-
|
||||
- name: Set up environment
|
||||
run: script/setup
|
||||
|
||||
|
||||
- name: Register problem matchers
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/gcc.json"
|
||||
echo "::add-matcher::.github/workflows/matchers/python.json"
|
||||
- run: esphome tests/${{ matrix.test }}.yaml compile
|
||||
|
||||
deploy-pypi:
|
||||
name: Build and publish to PyPi
|
||||
needs: [lint-clang-format, lint-clang-tidy, lint-python, test]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: '3.x'
|
||||
- name: Set up python environment
|
||||
run: |
|
||||
script/setup
|
||||
pip install setuptools wheel twine
|
||||
- name: Build
|
||||
run: python setup.py sdist bdist_wheel
|
||||
- name: Upload
|
||||
env:
|
||||
TWINE_USERNAME: __token__
|
||||
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
||||
run: twine upload dist/*
|
||||
|
||||
deploy-docker:
|
||||
name: Build and publish docker containers
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint-clang-format, lint-clang-tidy, lint-python, test]
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64, i386, armv7, aarch64]
|
||||
build_type: ["hassio", "docker"]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up env variables
|
||||
run: |
|
||||
tag="${GITHUB_REF#v}"
|
||||
base_version="2.1.2"
|
||||
|
||||
if [[ "${{ matrix.build_type }}" == "hassio" ]]; then
|
||||
build_from="esphome/esphome-hassio-base-${{ matrix.arch }}:${base_version}"
|
||||
build_to="esphome/esphome-hassio-${{ matrix.arch }}"
|
||||
dockerfile="docker/Dockerfile.hassio"
|
||||
else
|
||||
build_from="esphome/esphome-base-${{ matrix.arch }}:${base_version}"
|
||||
build_to="esphome/esphome-${{ matrix.arch }}"
|
||||
dockerfile="docker/Dockerfile"
|
||||
if [[ "${{ matrix.arch }}" == "amd64" ]]; then
|
||||
build_to="esphome/esphome"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set env variables so these values don't need to be calculated again
|
||||
echo "::set-env name=TAG::${tag}"
|
||||
echo "::set-env name=BUILD_FROM::${build_from}"
|
||||
echo "::set-env name=BUILD_TO::${build_to}"
|
||||
echo "::set-env name=IMAGE::${build_to}:${tag}"
|
||||
echo "::set-env name=DOCKERFILE::${dockerfile}"
|
||||
- name: Register QEMU binfmt
|
||||
run: docker run --rm --privileged multiarch/qemu-user-static:5.0.0-2 --reset -p yes
|
||||
- run: |
|
||||
docker build \
|
||||
--build-arg "BUILD_FROM=${BUILD_FROM}" \
|
||||
--build-arg "BUILD_VERSION=${TAG}" \
|
||||
--tag "${IMAGE}" \
|
||||
--file "${DOCKERFILE}" \
|
||||
.
|
||||
- name: Log in to docker hub
|
||||
env:
|
||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
run: docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
|
||||
- run: docker push "${IMAGE}"
|
||||
- if: ${{ github.event.release.prerelease) }}
|
||||
name: Publish docker beta tag
|
||||
run: |
|
||||
docker tag "${IMAGE}" ${BUILD_TO}:beta
|
||||
docker push "${BUILD_TO}:beta"
|
||||
- if: ${{ !github.event.release.prerelease) }}
|
||||
name: Publish docker latest tag
|
||||
run: |
|
||||
docker tag "${IMAGE}" ${BUILD_TO}:latest
|
||||
docker push "${BUILD_TO}:latest"
|
||||
|
||||
deploy-docker-manifest:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [deploy-docker]
|
||||
steps:
|
||||
- name: Enable experimental manifest support
|
||||
run: |
|
||||
mkdir -p ~/.docker
|
||||
echo "{\"experimental\": \"enabled\"}" > ~/.docker/config.json
|
||||
- name: Log in to docker hub
|
||||
env:
|
||||
DOCKER_USER: ${{ secrets.DOCKER_USER }}
|
||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||
run: docker login -u "${DOCKER_USER}" -p "${DOCKER_PASSWORD}"
|
||||
- name: "Create the manifest"
|
||||
run: |
|
||||
REPO=esphome/esphome
|
||||
TAG="${GITHUB_REF#v}"
|
||||
|
||||
docker manifest create ${REPO}:${TAG} \
|
||||
${REPO}-aarch64:${TAG} \
|
||||
${REPO}-amd64:${TAG} \
|
||||
${REPO}-armv7:${TAG} \
|
||||
${REPO}-i386:${TAG}
|
||||
echo "::set-env name=TAG::${TAG}"
|
||||
echo "::set-env name=REPO::${REPO}"
|
||||
- run: docker push ${REPO}:${TAG}
|
||||
|
||||
- name: Publish docker beta tag
|
||||
if: ${{ github.event.release.prerelease) }}
|
||||
run: |
|
||||
docker manifest create ${REPO}:beta \
|
||||
${REPO}-aarch64:beta \
|
||||
${REPO}-amd64:beta \
|
||||
${REPO}-armv7:beta \
|
||||
${REPO}-i386:beta
|
||||
docker push ${REPO}:beta
|
||||
- name: Publish docker latest tag
|
||||
if: ${{ !github.event.release.prerelease) }}
|
||||
run: |
|
||||
docker manifest create ${REPO}:latest \
|
||||
${REPO}-aarch64:latest \
|
||||
${REPO}-amd64:latest \
|
||||
${REPO}-armv7:latest \
|
||||
${REPO}-i386:latest
|
||||
docker push ${REPO}:latest
|
Reference in New Issue
Block a user