mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-19 23:26:29 +00:00
Use multistage
This commit is contained in:
parent
626a9f06c4
commit
5291e6c1f3
@ -21,157 +21,150 @@ variables:
|
|||||||
- name: versionBuilder
|
- name: versionBuilder
|
||||||
value: '4.4'
|
value: '4.4'
|
||||||
- name: versionWheels
|
- name: versionWheels
|
||||||
value: '0.10'
|
value: '0.11'
|
||||||
- group: docker
|
- group: docker
|
||||||
- group: wheels
|
- group: wheels
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
stages:
|
||||||
|
|
||||||
- job: 'Tox'
|
- stage: 'Test'
|
||||||
pool:
|
jobs:
|
||||||
vmImage: 'ubuntu-latest'
|
- job: 'Tox'
|
||||||
steps:
|
pool:
|
||||||
- task: UsePythonVersion@0
|
vmImage: 'ubuntu-latest'
|
||||||
displayName: 'Use Python 3.7'
|
steps:
|
||||||
inputs:
|
- task: UsePythonVersion@0
|
||||||
versionSpec: '3.7'
|
displayName: 'Use Python 3.7'
|
||||||
- script: pip install tox
|
inputs:
|
||||||
displayName: 'Install Tox'
|
versionSpec: '3.7'
|
||||||
- script: tox
|
- script: pip install tox
|
||||||
displayName: 'Run Tox'
|
displayName: 'Install Tox'
|
||||||
|
- script: tox
|
||||||
|
displayName: 'Run Tox'
|
||||||
|
- job: 'Black'
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-latest'
|
||||||
|
steps:
|
||||||
|
- task: UsePythonVersion@0
|
||||||
|
displayName: 'Use Python $(python.version)'
|
||||||
|
inputs:
|
||||||
|
versionSpec: '3.7'
|
||||||
|
- script: pip install black
|
||||||
|
displayName: 'Install black'
|
||||||
|
- script: black --check hassio tests
|
||||||
|
displayName: 'Run Black'
|
||||||
|
- job: 'JQ'
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-latest'
|
||||||
|
steps:
|
||||||
|
- script: sudo apt-get install -y jq
|
||||||
|
displayName: 'Install JQ'
|
||||||
|
- bash: |
|
||||||
|
shopt -s globstar
|
||||||
|
cat **/*.json | jq '.'
|
||||||
|
displayName: 'Run JQ'
|
||||||
|
- job: 'Hadolint'
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-latest'
|
||||||
|
steps:
|
||||||
|
- script: sudo docker pull hadolint/hadolint:$(versionHadolint)
|
||||||
|
displayName: 'Install Hadolint'
|
||||||
|
- script: |
|
||||||
|
sudo docker run --rm -i \
|
||||||
|
-v $(pwd)/.hadolint.yaml:/.hadolint.yaml:ro \
|
||||||
|
hadolint/hadolint:$(versionHadolint) < Dockerfile
|
||||||
|
displayName: 'Run Hadolint'
|
||||||
|
|
||||||
|
- stage: 'Wheels'
|
||||||
|
jobs:
|
||||||
|
- job: 'Wheels'
|
||||||
|
condition: eq(variables['Build.SourceBranchName'], 'dev')
|
||||||
|
timeoutInMinutes: 360
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-latest'
|
||||||
|
strategy:
|
||||||
|
maxParallel: 3
|
||||||
|
matrix:
|
||||||
|
amd64:
|
||||||
|
buildArch: 'amd64'
|
||||||
|
i386:
|
||||||
|
buildArch: 'i386'
|
||||||
|
armhf:
|
||||||
|
buildArch: 'armhf'
|
||||||
|
armv7:
|
||||||
|
buildArch: 'armv7'
|
||||||
|
aarch64:
|
||||||
|
buildArch: 'aarch64'
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y --no-install-recommends \
|
||||||
|
qemu-user-static \
|
||||||
|
binfmt-support \
|
||||||
|
curl
|
||||||
|
|
||||||
- job: 'Black'
|
sudo mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
|
||||||
pool:
|
sudo update-binfmts --enable qemu-arm
|
||||||
vmImage: 'ubuntu-latest'
|
sudo update-binfmts --enable qemu-aarch64
|
||||||
steps:
|
displayName: 'Initial cross build'
|
||||||
- task: UsePythonVersion@0
|
- script: |
|
||||||
displayName: 'Use Python $(python.version)'
|
mkdir -p .ssh
|
||||||
inputs:
|
echo -e "-----BEGIN RSA PRIVATE KEY-----\n$(wheelsSSH)\n-----END RSA PRIVATE KEY-----" >> .ssh/id_rsa
|
||||||
versionSpec: '3.7'
|
ssh-keyscan -H $(wheelsHost) >> .ssh/known_hosts
|
||||||
- script: pip install black
|
chmod 600 .ssh/*
|
||||||
displayName: 'Install black'
|
displayName: 'Install ssh key'
|
||||||
- script: black --check hassio tests
|
- script: sudo docker pull homeassistant/$(buildArch)-wheels:$(versionWheels)-$(basePythonTag)
|
||||||
displayName: 'Run Black'
|
displayName: 'Install wheels builder'
|
||||||
|
- script: |
|
||||||
|
curl -s -o requirements_diff.txt https://raw.githubusercontent.com/home-assistant/hassio/master/requirements.txt
|
||||||
|
sudo docker run --rm -v $(pwd):/data:ro -v $(pwd)/.ssh:/root/.ssh:rw \
|
||||||
|
homeassistant/$(buildArch)-wheels:$(versionWheels)-$(basePythonTag) \
|
||||||
|
--apk "build-base;libffi-dev;openssl-dev" \
|
||||||
|
--index $(wheelsIndex) \
|
||||||
|
--requirement requirements.txt \
|
||||||
|
--requirement-diff requirements_diff.txt \
|
||||||
|
--upload rsync \
|
||||||
|
--remote wheels@$(wheelsHost):/opt/wheels
|
||||||
|
displayName: 'Run wheels build'
|
||||||
|
|
||||||
|
- stage: 'Deploy'
|
||||||
|
jobs:
|
||||||
|
- job: 'VersionValidate'
|
||||||
|
condition: or(startsWith(variables['Build.SourceBranch'], 'refs/tags'), eq(variables['Build.SourceBranchName'], 'dev'))
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-latest'
|
||||||
|
steps:
|
||||||
|
- task: UsePythonVersion@0
|
||||||
|
displayName: 'Use Python 3.7'
|
||||||
|
inputs:
|
||||||
|
versionSpec: '3.7'
|
||||||
|
- script: |
|
||||||
|
setup_version="$(python setup.py -V)"
|
||||||
|
branch_version="$(Build.SourceBranchName)"
|
||||||
|
|
||||||
- job: 'JQ'
|
if [ "${branch_version}" == "dev" ]; then
|
||||||
pool:
|
exit 0
|
||||||
vmImage: 'ubuntu-latest'
|
elif [ "${setup_version}" != "${branch_version}" ]; then
|
||||||
steps:
|
echo "Version of tag ${branch_version} don't match with ${setup_version}!"
|
||||||
- script: sudo apt-get install -y jq
|
exit 1
|
||||||
displayName: 'Install JQ'
|
fi
|
||||||
- bash: |
|
displayName: 'Check version of branch/tag'
|
||||||
shopt -s globstar
|
- job: 'Release'
|
||||||
cat **/*.json | jq '.'
|
dependsOn:
|
||||||
displayName: 'Run JQ'
|
- 'VersionValidate'
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-latest'
|
||||||
- job: 'Hadolint'
|
steps:
|
||||||
pool:
|
- script: sudo docker login -u $(dockerUser) -p $(dockerPassword)
|
||||||
vmImage: 'ubuntu-latest'
|
displayName: 'Docker hub login'
|
||||||
steps:
|
- script: sudo docker pull homeassistant/amd64-builder:$(versionBuilder)
|
||||||
- script: sudo docker pull hadolint/hadolint:$(versionHadolint)
|
displayName: 'Install Builder'
|
||||||
displayName: 'Install Hadolint'
|
- script: |
|
||||||
- script: |
|
sudo docker run --rm --privileged \
|
||||||
sudo docker run --rm -i \
|
-v ~/.docker:/root/.docker \
|
||||||
-v $(pwd)/.hadolint.yaml:/.hadolint.yaml:ro \
|
-v /run/docker.sock:/run/docker.sock:rw -v $(pwd):/data:ro \
|
||||||
hadolint/hadolint:$(versionHadolint) < Dockerfile
|
homeassistant/amd64-builder:$(versionBuilder) \
|
||||||
displayName: 'Run Hadolint'
|
--supervisor $(basePythonTag) --version $(Build.SourceBranchName) \
|
||||||
|
--all -t /data --docker-hub homeassistant
|
||||||
|
displayName: 'Build Release'
|
||||||
- job: 'Wheels'
|
|
||||||
condition: eq(variables['Build.SourceBranchName'], 'dev')
|
|
||||||
timeoutInMinutes: 360
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
strategy:
|
|
||||||
maxParallel: 3
|
|
||||||
matrix:
|
|
||||||
amd64:
|
|
||||||
buildArch: 'amd64'
|
|
||||||
i386:
|
|
||||||
buildArch: 'i386'
|
|
||||||
armhf:
|
|
||||||
buildArch: 'armhf'
|
|
||||||
armv7:
|
|
||||||
buildArch: 'armv7'
|
|
||||||
aarch64:
|
|
||||||
buildArch: 'aarch64'
|
|
||||||
steps:
|
|
||||||
- script: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y --no-install-recommends \
|
|
||||||
qemu-user-static \
|
|
||||||
binfmt-support \
|
|
||||||
curl
|
|
||||||
|
|
||||||
sudo mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
|
|
||||||
sudo update-binfmts --enable qemu-arm
|
|
||||||
sudo update-binfmts --enable qemu-aarch64
|
|
||||||
displayName: 'Initial cross build'
|
|
||||||
- script: |
|
|
||||||
mkdir -p .ssh
|
|
||||||
echo -e "-----BEGIN RSA PRIVATE KEY-----\n$(wheelsSSH)\n-----END RSA PRIVATE KEY-----" >> .ssh/id_rsa
|
|
||||||
ssh-keyscan -H $(wheelsHost) >> .ssh/known_hosts
|
|
||||||
chmod 600 .ssh/*
|
|
||||||
displayName: 'Install ssh key'
|
|
||||||
- script: sudo docker pull homeassistant/$(buildArch)-wheels:$(versionWheels)-$(basePythonTag)
|
|
||||||
displayName: 'Install wheels builder'
|
|
||||||
- script: |
|
|
||||||
curl -s -o requirements_diff.txt https://raw.githubusercontent.com/home-assistant/hassio/master/requirements.txt
|
|
||||||
sudo docker run --rm -v $(pwd):/data:ro -v $(pwd)/.ssh:/root/.ssh:rw \
|
|
||||||
homeassistant/$(buildArch)-wheels:$(versionWheels)-$(basePythonTag) \
|
|
||||||
--apk "build-base;libffi-dev;openssl-dev" \
|
|
||||||
--index $(wheelsIndex) \
|
|
||||||
--requirement requirements.txt \
|
|
||||||
--requirement-diff requirements_diff.txt \
|
|
||||||
--upload rsync \
|
|
||||||
--remote wheels@$(wheelsHost):/opt/wheels
|
|
||||||
displayName: 'Run wheels build'
|
|
||||||
|
|
||||||
|
|
||||||
- job: 'VersionValidate'
|
|
||||||
condition: or(startsWith(variables['Build.SourceBranch'], 'refs/tags'), eq(variables['Build.SourceBranchName'], 'dev'))
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
displayName: 'Use Python 3.7'
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.7'
|
|
||||||
- script: |
|
|
||||||
setup_version="$(python setup.py -V)"
|
|
||||||
branch_version="$(Build.SourceBranchName)"
|
|
||||||
|
|
||||||
if [ "${branch_version}" == "dev" ]; then
|
|
||||||
exit 0
|
|
||||||
elif [ "${setup_version}" != "${branch_version}" ]; then
|
|
||||||
echo "Version of tag ${branch_version} don't match with ${setup_version}!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
displayName: 'Check version of branch/tag'
|
|
||||||
|
|
||||||
|
|
||||||
- job: 'Release'
|
|
||||||
dependsOn:
|
|
||||||
- 'JQ'
|
|
||||||
- 'Tox'
|
|
||||||
- 'Hadolint'
|
|
||||||
- 'VersionValidate'
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- script: sudo docker login -u $(dockerUser) -p $(dockerPassword)
|
|
||||||
displayName: 'Docker hub login'
|
|
||||||
- script: sudo docker pull homeassistant/amd64-builder:$(versionBuilder)
|
|
||||||
displayName: 'Install Builder'
|
|
||||||
- script: |
|
|
||||||
sudo docker run --rm --privileged \
|
|
||||||
-v ~/.docker:/root/.docker \
|
|
||||||
-v /run/docker.sock:/run/docker.sock:rw -v $(pwd):/data:ro \
|
|
||||||
homeassistant/amd64-builder:$(versionBuilder) \
|
|
||||||
--supervisor $(basePythonTag) --version $(Build.SourceBranchName) \
|
|
||||||
--all -t /data --docker-hub homeassistant
|
|
||||||
displayName: 'Build Release'
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user