mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-07-28 15:36:29 +00:00
Support development builds in pull-requests (#1464)
Use the "run-dev-build" label to trigger a development build. This will only generate a build for the machines the PR has been tagged with.
This commit is contained in:
parent
631c0c5d53
commit
b7bbb63a26
88
.github/workflows/dev.yml
vendored
88
.github/workflows/dev.yml
vendored
@ -4,15 +4,18 @@ name: Development build
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened,synchronize,labeled]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
version:
|
prepare:
|
||||||
|
if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'run-dev-build') }}
|
||||||
name: Generate version
|
name: Prepare build
|
||||||
runs-on: [ "ubuntu-20.04" ]
|
runs-on: [ "ubuntu-20.04" ]
|
||||||
outputs:
|
outputs:
|
||||||
version_main: ${{ steps.version_main.outputs.version_main }}
|
version_main: ${{ steps.version_main.outputs.version_main }}
|
||||||
version_dev: ${{ steps.version_dev.outputs.version_dev }}
|
version_dev: ${{ steps.version_dev.outputs.version_dev }}${{ steps.version_pr.outputs.version_pr }}
|
||||||
|
matrix: ${{ steps.generate_matrix.outputs.result }}
|
||||||
steps:
|
steps:
|
||||||
- name: Generate Development build version
|
- name: Generate Development build version
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -21,6 +24,14 @@ jobs:
|
|||||||
version_dev="dev$(date --utc +'%Y%m%d')"
|
version_dev="dev$(date --utc +'%Y%m%d')"
|
||||||
echo "Development version \"${version_dev}\""
|
echo "Development version \"${version_dev}\""
|
||||||
echo "::set-output name=version_dev::${version_dev}"
|
echo "::set-output name=version_dev::${version_dev}"
|
||||||
|
- name: Generate Development build version for PR
|
||||||
|
if: ${{ github.event.pull_request }}
|
||||||
|
shell: bash
|
||||||
|
id: version_pr
|
||||||
|
run: |
|
||||||
|
version_pr=$(printf "%05d" ${{ github.event.pull_request.number }})
|
||||||
|
echo "Development build for PR #${{ github.event.pull_request.number }}"
|
||||||
|
echo "::set-output name=version_pr::${version_pr}"
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Get Major/Minor version
|
- name: Get Major/Minor version
|
||||||
id: version_main
|
id: version_main
|
||||||
@ -28,36 +39,50 @@ jobs:
|
|||||||
major=$(cat ${GITHUB_WORKSPACE}/buildroot-external/meta | grep VERSION_MAJOR | cut -d'=' -f2)
|
major=$(cat ${GITHUB_WORKSPACE}/buildroot-external/meta | grep VERSION_MAJOR | cut -d'=' -f2)
|
||||||
build=$(cat ${GITHUB_WORKSPACE}/buildroot-external/meta | grep VERSION_BUILD | cut -d'=' -f2)
|
build=$(cat ${GITHUB_WORKSPACE}/buildroot-external/meta | grep VERSION_BUILD | cut -d'=' -f2)
|
||||||
echo "::set-output name=version_main::${major}.${build}"
|
echo "::set-output name=version_main::${major}.${build}"
|
||||||
|
- name: Create build matrix
|
||||||
|
uses: actions/github-script@v4
|
||||||
|
id: generate_matrix
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const boards = require('./.github/workflows/matrix.json')
|
||||||
|
|
||||||
|
if (context.eventName == "workflow_dispatch") {
|
||||||
|
console.log("Run full build for all boards")
|
||||||
|
return { "board": boards }
|
||||||
|
}
|
||||||
|
|
||||||
|
const labels = context.payload.pull_request.labels.map(l => l.name)
|
||||||
|
const labelsSet = new Set(labels)
|
||||||
|
const buildBoards = boards.filter(b => labelsSet.has(b.label))
|
||||||
|
|
||||||
|
return { "board": buildBoards }
|
||||||
|
|
||||||
build:
|
build:
|
||||||
name: Release build for ${{ matrix.board.name }}
|
if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'run-dev-build') }}
|
||||||
needs: version
|
name: Development build for ${{ matrix.board.id }}
|
||||||
|
environment: "dev_build"
|
||||||
|
needs: prepare
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}
|
||||||
board:
|
|
||||||
- {"name": "ova", "output": "ova", "runner": "x86-64-runner"}
|
|
||||||
- {"name": "generic_x86_64", "output": "generic-x86-64", "runner": "x86-64-runner"}
|
|
||||||
- {"name": "khadas_vim3", "output": "khadas-vim3", "runner": "aarch64-runner"}
|
|
||||||
- {"name": "odroid_c2", "output": "odroid-c2", "runner": "aarch64-runner"}
|
|
||||||
- {"name": "odroid_c4", "output": "odroid-c4", "runner": "aarch64-runner"}
|
|
||||||
- {"name": "odroid_n2", "output": "odroid-n2", "runner": "aarch64-runner"}
|
|
||||||
- {"name": "odroid_xu4", "output": "odroid-xu4" , "runner": "aarch64-runner"}
|
|
||||||
- {"name": "rpi", "output": "rpi", "runner": "arm-runner"}
|
|
||||||
- {"name": "rpi0_w", "output": "rpi0-w", "runner": "arm-runner"}
|
|
||||||
- {"name": "rpi2", "output": "rpi2", "runner": "arm-runner"}
|
|
||||||
- {"name": "rpi3", "output": "rpi3", "runner": "arm-runner"}
|
|
||||||
- {"name": "rpi3_64", "output": "rpi3-64", "runner": "aarch64-runner"}
|
|
||||||
- {"name": "rpi4", "output": "rpi4", "runner": "arm-runner"}
|
|
||||||
- {"name": "rpi4_64", "output": "rpi4-64", "runner": "aarch64-runner"}
|
|
||||||
- {"name": "tinker", "output": "tinker", "runner": "arm-runner"}
|
|
||||||
runs-on: ${{ matrix.board.runner }}
|
runs-on: ${{ matrix.board.runner }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
- name: Define git reference
|
||||||
- uses: actions/checkout@v2
|
uses: actions/github-script@v4
|
||||||
|
id: generate_gitref
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
if (context.eventName == "workflow_dispatch")
|
||||||
|
return { "ref": context.ref }
|
||||||
|
return { "ref": context.payload.pull_request.head.sha }
|
||||||
|
|
||||||
|
- name: Checkout source
|
||||||
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
persist-credentials: false
|
||||||
|
ref: ${{ fromJSON(steps.generate_gitref.outputs.result).ref }}
|
||||||
|
|
||||||
- name: Build container
|
- name: Build container
|
||||||
run: docker build -t haos-builder .
|
run: docker build -t haos-builder .
|
||||||
@ -77,7 +102,7 @@ jobs:
|
|||||||
docker run --rm --privileged -v "${GITHUB_WORKSPACE}:/build" \
|
docker run --rm --privileged -v "${GITHUB_WORKSPACE}:/build" \
|
||||||
-e BUILDER_UID="${BUILDER_UID}" -e BUILDER_GID="${BUILDER_GID}" \
|
-e BUILDER_UID="${BUILDER_UID}" -e BUILDER_GID="${BUILDER_GID}" \
|
||||||
-v "${{ matrix.board.runner }}-build-cache:/cache" \
|
-v "${{ matrix.board.runner }}-build-cache:/cache" \
|
||||||
haos-builder make BUILDDIR=/build VERSION_DEV=${{ needs.version.outputs.version_dev }} ${{ matrix.board.name }}
|
haos-builder make BUILDDIR=/build VERSION_DEV=${{ needs.prepare.outputs.version_dev }} ${{ matrix.board.defconfig }}
|
||||||
|
|
||||||
- name: Upload images
|
- name: Upload images
|
||||||
uses: burnett01/rsync-deployments@4.1
|
uses: burnett01/rsync-deployments@4.1
|
||||||
@ -85,15 +110,16 @@ jobs:
|
|||||||
rsh: -q
|
rsh: -q
|
||||||
switches: -aW --ignore-existing
|
switches: -aW --ignore-existing
|
||||||
path: release/
|
path: release/
|
||||||
remote_path: ${{ secrets.DEV_TARGET_PATH }}/${{ needs.version.outputs.version_main }}.${{ needs.version.outputs.version_dev }}/
|
remote_path: ${{ secrets.DEV_TARGET_PATH }}/${{ needs.prepare.outputs.version_main }}.${{ needs.prepare.outputs.version_dev }}/
|
||||||
remote_host: ${{ secrets.DEV_HOST }}
|
remote_host: ${{ secrets.DEV_HOST }}
|
||||||
remote_port: ${{ secrets.DEV_PORT }}
|
remote_port: ${{ secrets.DEV_PORT }}
|
||||||
remote_user: ${{ secrets.DEV_USERNAME }}
|
remote_user: ${{ secrets.DEV_USERNAME }}
|
||||||
remote_key: ${{ secrets.DEV_SSH_KEY }}
|
remote_key: ${{ secrets.DEV_SSH_KEY }}
|
||||||
|
|
||||||
bump_version:
|
bump_version:
|
||||||
name: Bump dev version to ${{ needs.version.outputs.version_main }}.${{ needs.version.outputs.version_dev }}
|
name: Bump dev channel version
|
||||||
needs: [ build, version ]
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
||||||
|
needs: [ build, prepare ]
|
||||||
runs-on: [ "ubuntu-20.04" ]
|
runs-on: [ "ubuntu-20.04" ]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@ -104,10 +130,10 @@ jobs:
|
|||||||
email: ${{ secrets.GIT_EMAIL }}
|
email: ${{ secrets.GIT_EMAIL }}
|
||||||
token: ${{ secrets.GIT_TOKEN }}
|
token: ${{ secrets.GIT_TOKEN }}
|
||||||
|
|
||||||
- name: Bump Home Assistant OS dev version
|
- name: Bump Home Assistant OS dev channel version to ${{ needs.prepare.outputs.version_main }}.${{ needs.prepare.outputs.version_dev }}
|
||||||
uses: home-assistant/actions/helpers/version-push@master
|
uses: home-assistant/actions/helpers/version-push@master
|
||||||
with:
|
with:
|
||||||
key: "hassos[]"
|
key: "hassos[]"
|
||||||
key-description: "Home Assistant OS"
|
key-description: "Home Assistant OS"
|
||||||
version: ${{ needs.version.outputs.version_main }}.${{ needs.version.outputs.version_dev }}
|
version: ${{ needs.prepare.outputs.version_main }}.${{ needs.prepare.outputs.version_dev }}
|
||||||
channel: "dev"
|
channel: "dev"
|
||||||
|
92
.github/workflows/matrix.json
vendored
Normal file
92
.github/workflows/matrix.json
vendored
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "ova",
|
||||||
|
"defconfig": "ova",
|
||||||
|
"runner": "x86-64-runner",
|
||||||
|
"label": "board/ova"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "generic-x86-64",
|
||||||
|
"defconfig": "generic_x86_64",
|
||||||
|
"runner": "x86-64-runner",
|
||||||
|
"label": "board/generic-x86-64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "khadas-vim3",
|
||||||
|
"defconfig": "khadas_vim3",
|
||||||
|
"runner": "aarch64-runner",
|
||||||
|
"label": "board/khadas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-c2",
|
||||||
|
"defconfig": "odroid_c2",
|
||||||
|
"runner": "aarch64-runner",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-c4",
|
||||||
|
"defconfig": "odroid_c4",
|
||||||
|
"runner": "aarch64-runner",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-n2",
|
||||||
|
"defconfig": "odroid_n2",
|
||||||
|
"runner": "aarch64-runner",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-xu4",
|
||||||
|
"defconfig": "odroid_xu4",
|
||||||
|
"runner": "aarch64-runner",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi",
|
||||||
|
"defconfig": "rpi",
|
||||||
|
"runner": "arm-runner",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi0-w",
|
||||||
|
"defconfig": "rpi0_w",
|
||||||
|
"runner": "arm-runner",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi2",
|
||||||
|
"defconfig": "rpi2",
|
||||||
|
"runner": "arm-runner",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi3",
|
||||||
|
"defconfig": "rpi3",
|
||||||
|
"runner": "arm-runner",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi3-64",
|
||||||
|
"defconfig": "rpi3_64",
|
||||||
|
"runner": "aarch64-runner",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi4",
|
||||||
|
"defconfig": "rpi4",
|
||||||
|
"runner": "arm-runner",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi4-64",
|
||||||
|
"defconfig": "rpi4_64",
|
||||||
|
"runner": "aarch64-runner",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tinker",
|
||||||
|
"defconfig": "tinker",
|
||||||
|
"runner": "arm-runner",
|
||||||
|
"label": "board/tinker"
|
||||||
|
}
|
||||||
|
]
|
Loading…
x
Reference in New Issue
Block a user