esphome/.github/workflows/release.yml

220 lines
6.3 KiB
YAML
Raw Normal View History

2022-09-06 05:48:01 +02:00
---
2020-07-14 14:34:44 +02:00
name: Publish Release
2022-09-06 05:48:01 +02:00
# yamllint disable-line rule:truthy
2020-07-14 14:34:44 +02:00
on:
workflow_dispatch:
2020-07-14 14:34:44 +02:00
release:
types: [published]
schedule:
- cron: "0 2 * * *"
2020-07-14 14:34:44 +02:00
permissions:
contents: read
2020-07-14 14:34:44 +02:00
jobs:
init:
name: Initialize build
2020-07-14 14:34:44 +02:00
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.tag.outputs.tag }}
2020-07-14 14:34:44 +02:00
steps:
- uses: actions/checkout@v4.1.1
- name: Get tag
id: tag
2022-09-06 05:48:01 +02:00
# yamllint disable rule:line-length
2020-07-14 14:34:44 +02:00
run: |
if [[ "$GITHUB_EVENT_NAME" = "release" ]]; then
TAG="${GITHUB_REF#refs/tags/}"
else
TAG=$(cat esphome/const.py | sed -n -E "s/^__version__\s+=\s+\"(.+)\"$/\1/p")
today="$(date --utc '+%Y%m%d')"
TAG="${TAG}${today}"
BRANCH=${GITHUB_REF#refs/heads/}
if [[ "$BRANCH" != "dev" ]]; then
TAG="${TAG}-${BRANCH}"
fi
fi
echo "tag=${TAG}" >> $GITHUB_OUTPUT
2022-09-06 05:48:01 +02:00
# yamllint enable rule:line-length
2020-07-14 14:34:44 +02:00
deploy-pypi:
name: Build and publish to PyPi
if: github.repository == 'esphome/esphome' && github.event_name == 'release'
2020-07-14 14:34:44 +02:00
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
2020-07-14 14:34:44 +02:00
- name: Set up Python
uses: actions/setup-python@v5.0.0
2020-07-14 14:34:44 +02:00
with:
2022-09-06 05:48:01 +02:00
python-version: "3.x"
2020-07-14 14:34:44 +02:00
- name: Set up python environment
2023-06-21 06:36:54 +02:00
env:
ESPHOME_NO_VENV: 1
2020-07-14 14:34:44 +02:00
run: |
script/setup
2023-06-21 06:36:54 +02:00
pip install twine
2020-07-14 14:34:44 +02:00
- 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 ESPHome ${{ matrix.platform }}
if: github.repository == 'esphome/esphome'
permissions:
contents: read
packages: write
2020-07-14 14:34:44 +02:00
runs-on: ubuntu-latest
needs: [init]
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm/v7
- linux/arm64
steps:
- uses: actions/checkout@v4.1.1
- name: Set up Python
uses: actions/setup-python@v5.0.0
with:
python-version: "3.9"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.0.0
- name: Set up QEMU
if: matrix.platform != 'linux/amd64'
uses: docker/setup-qemu-action@v3.0.0
- name: Log in to docker hub
uses: docker/login-action@v3.0.0
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Log in to the GitHub container registry
uses: docker/login-action@v3.0.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build docker
uses: ./.github/actions/build-image
with:
platform: ${{ matrix.platform }}
target: docker
baseimg: docker
suffix: ""
version: ${{ needs.init.outputs.tag }}
- name: Build ha-addon
uses: ./.github/actions/build-image
with:
platform: ${{ matrix.platform }}
target: hassio
baseimg: hassio
suffix: "hassio"
version: ${{ needs.init.outputs.tag }}
- name: Build lint
uses: ./.github/actions/build-image
with:
platform: ${{ matrix.platform }}
target: lint
baseimg: docker
suffix: lint
version: ${{ needs.init.outputs.tag }}
deploy-manifest:
name: Publish ESPHome ${{ matrix.image.title }} to ${{ matrix.registry }}
runs-on: ubuntu-latest
needs:
- init
- deploy-docker
if: github.repository == 'esphome/esphome'
permissions:
contents: read
packages: write
2020-07-14 14:34:44 +02:00
strategy:
fail-fast: false
2020-07-14 14:34:44 +02:00
matrix:
image:
- title: "ha-addon"
target: "hassio"
suffix: "hassio"
- title: "docker"
target: "docker"
suffix: ""
- title: "lint"
target: "lint"
suffix: "lint"
registry:
- ghcr
- dockerhub
2020-07-14 14:34:44 +02:00
steps:
- uses: actions/checkout@v4.1.1
- name: Download digests
uses: actions/download-artifact@v3.0.2
2022-09-06 05:48:01 +02:00
with:
name: digests-${{ matrix.image.target }}-${{ matrix.registry }}
path: /tmp/digests
2022-09-06 05:48:01 +02:00
- name: Set up Docker Buildx
2023-09-13 00:06:32 +02:00
uses: docker/setup-buildx-action@v3.0.0
2020-07-15 01:37:30 +02:00
2022-09-06 05:48:01 +02:00
- name: Log in to docker hub
if: matrix.registry == 'dockerhub'
2023-09-13 00:06:32 +02:00
uses: docker/login-action@v3.0.0
2022-09-06 05:48:01 +02:00
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Log in to the GitHub container registry
if: matrix.registry == 'ghcr'
2023-09-13 00:06:32 +02:00
uses: docker/login-action@v3.0.0
2022-09-06 05:48:01 +02:00
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate short tags
id: tags
2022-09-06 05:48:01 +02:00
run: |
output=$(docker/generate_tags.py \
2022-09-06 05:48:01 +02:00
--tag "${{ needs.init.outputs.tag }}" \
--suffix "${{ matrix.image.suffix }}" \
--registry "${{ matrix.registry }}")
echo $output
for l in $output; do
echo $l >> $GITHUB_OUTPUT
done
2020-07-14 14:34:44 +02:00
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create $(jq -Rcnr 'inputs | . / "," | map("-t " + .) | join(" ")' <<< "${{ steps.tags.outputs.tags}}") \
$(printf '${{ steps.tags.outputs.image }}@sha256:%s ' *)
deploy-ha-addon-repo:
if: github.repository == 'esphome/esphome' && github.event_name == 'release'
runs-on: ubuntu-latest
needs: [deploy-manifest]
steps:
- name: Trigger Workflow
uses: actions/github-script@v7.0.1
with:
github-token: ${{ secrets.DEPLOY_HA_ADDON_REPO_TOKEN }}
script: |
github.rest.actions.createWorkflowDispatch({
owner: "esphome",
repo: "home-assistant-addon",
workflow_id: "bump-version.yml",
ref: "main",
inputs: {
version: "${{ github.event.release.tag_name }}",
2023-02-09 05:37:55 +01:00
content: ${{ toJSON(github.event.release.body) }}
}
})