From 25745e9e27a953073cd4a1906978f5c95d323bb8 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 9 Jul 2019 15:32:09 +0200 Subject: [PATCH] Update build pipeline --- azure-pipelines-release.yml | 277 ++++++++++++++++++------------------ 1 file changed, 139 insertions(+), 138 deletions(-) diff --git a/azure-pipelines-release.yml b/azure-pipelines-release.yml index af737290143..0a6618718a2 100644 --- a/azure-pipelines-release.yml +++ b/azure-pipelines-release.yml @@ -8,161 +8,162 @@ trigger: pr: none variables: - name: versionBuilder - value: '4.5' + value: '5.1' - group: docker - group: github - group: twine -jobs: +stages: +- stage: 'Validate' + jobs: + - job: 'VersionValidate' + condition: startsWith(variables['Build.SourceBranch'], 'refs/tags') + 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: 'VersionValidate' - condition: startsWith(variables['Build.SourceBranch'], 'refs/tags') - 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 [ "${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' + - script: | + sudo apt-get install -y --no-install-recommends \ + jq curl - if [ "${setup_version}" != "${branch_version}" ]; then - echo "Version of tag ${branch_version} don't match with ${setup_version}!" + release="$(Build.SourceBranchName)" + created_by="$(curl -s https://api.github.com/repos/home-assistant/home-assistant/releases/tags/${release} | jq --raw-output '.author.login')" + + if [[ "${created_by}" =~ ^(balloob|pvizeli|fabaff|robbiet480)$ ]]; then + exit 0 + fi + + echo "${created_by} is not allowed to create an release!" exit 1 - fi - displayName: 'Check version of branch/tag' - - script: | - sudo apt-get install -y --no-install-recommends \ - jq curl + displayName: 'Check rights' - release="$(Build.SourceBranchName)" - created_by="$(curl -s https://api.github.com/repos/home-assistant/home-assistant/releases/tags/${release} | jq --raw-output '.author.login')" +- stage: 'Build' + jobs: + - job: 'ReleasePython' + condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags'), succeeded('VersionValidate')) + dependsOn: + - 'VersionValidate' + pool: + vmImage: 'ubuntu-latest' + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python 3.7' + inputs: + versionSpec: '3.7' + - script: pip install twine wheel + displayName: 'Install tools' + - script: python setup.py sdist bdist_wheel + displayName: 'Build package' + - script: | + export TWINE_USERNAME="$(twineUser)" + export TWINE_PASSWORD="$(twinePassword)" + + twine upload dist/* --skip-existing + displayName: 'Upload pypi' + - job: 'ReleaseDocker' + condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags'), succeeded('VersionValidate')) + dependsOn: + - 'VersionValidate' + timeoutInMinutes: 240 + pool: + vmImage: 'ubuntu-latest' + strategy: + maxParallel: 5 + matrix: + amd64: + buildArch: 'amd64' + buildMachine: 'qemux86-64,intel-nuc' + i386: + buildArch: 'i386' + buildMachine: 'qemux86' + armhf: + buildArch: 'armhf' + buildMachine: 'qemuarm,raspberrypi' + armv7: + buildArch: 'armv7' + buildMachine: 'raspberrypi2,raspberrypi3,odroid-xu,tinker' + aarch64: + buildArch: 'aarch64' + buildMachine: 'qemuarm-64,raspberrypi3-64,odroid-c2,orangepi-prime' + 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: | + set -e - if [[ "${created_by}" =~ ^(balloob|pvizeli|fabaff|robbiet480)$ ]]; then - exit 0 - fi + sudo docker run --rm --privileged \ + -v ~/.docker:/root/.docker \ + -v /run/docker.sock:/run/docker.sock:rw \ + homeassistant/amd64-builder:$(versionBuilder) \ + --homeassistant $(Build.SourceBranchName) "--$(buildArch)" \ + -r https://github.com/home-assistant/hassio-homeassistant \ + -t generic --docker-hub homeassistant - echo "${created_by} is not allowed to create an release!" - exit 1 - displayName: 'Check rights' + sudo docker run --rm --privileged \ + -v ~/.docker:/root/.docker \ + -v /run/docker.sock:/run/docker.sock:rw \ + homeassistant/amd64-builder:$(versionBuilder) \ + --homeassistant-machine "$(Build.SourceBranchName)=$(buildMachine)" \ + -r https://github.com/home-assistant/hassio-homeassistant \ + -t machine --docker-hub homeassistant + displayName: 'Build Release' +- stage: 'Publish' + jobs: + - job: 'ReleaseHassio' + condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags'), succeeded('ReleaseDocker')) + dependsOn: + - 'ReleaseDocker' + pool: + vmImage: 'ubuntu-latest' + steps: + - script: | + sudo apt-get install -y --no-install-recommends \ + git jq curl -- job: 'ReleasePython' - condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags'), succeeded('VersionValidate')) - dependsOn: - - 'VersionValidate' - pool: - vmImage: 'ubuntu-latest' - steps: - - task: UsePythonVersion@0 - displayName: 'Use Python 3.7' - inputs: - versionSpec: '3.7' - - script: pip install twine wheel - displayName: 'Install tools' - - script: python setup.py sdist bdist_wheel - displayName: 'Build package' - - script: | - export TWINE_USERNAME="$(twineUser)" - export TWINE_PASSWORD="$(twinePassword)" - - twine upload dist/* --skip-existing - displayName: 'Upload pypi' + git config --global user.name "Pascal Vizeli" + git config --global user.email "pvizeli@syshack.ch" + git config --global credential.helper store + echo "https://$(githubToken):x-oauth-basic@github.com" > $HOME/.git-credentials + displayName: 'Install requirements' + - script: | + set -e -- job: 'ReleaseDocker' - condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags'), succeeded('VersionValidate')) - dependsOn: - - 'VersionValidate' - timeoutInMinutes: 240 - pool: - vmImage: 'ubuntu-latest' - strategy: - maxParallel: 5 - matrix: - amd64: - buildArch: 'amd64' - buildMachine: 'qemux86-64,intel-nuc' - i386: - buildArch: 'i386' - buildMachine: 'qemux86' - armhf: - buildArch: 'armhf' - buildMachine: 'qemuarm,raspberrypi' - armv7: - buildArch: 'armv7' - buildMachine: 'raspberrypi2,raspberrypi3,odroid-xu,tinker' - aarch64: - buildArch: 'aarch64' - buildMachine: 'qemuarm-64,raspberrypi3-64,odroid-c2,orangepi-prime' - 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: | - set -e + version="$(Build.SourceBranchName)" - sudo docker run --rm --privileged \ - -v ~/.docker:/root/.docker \ - -v /run/docker.sock:/run/docker.sock:rw \ - homeassistant/amd64-builder:$(versionBuilder) \ - --homeassistant $(Build.SourceBranchName) "--$(buildArch)" \ - -r https://github.com/home-assistant/hassio-homeassistant \ - -t generic --docker-hub homeassistant + git clone https://github.com/home-assistant/hassio-version + cd hassio-version - sudo docker run --rm --privileged \ - -v ~/.docker:/root/.docker \ - -v /run/docker.sock:/run/docker.sock:rw \ - homeassistant/amd64-builder:$(versionBuilder) \ - --homeassistant-machine "$(Build.SourceBranchName)=$(buildMachine)" \ - -r https://github.com/home-assistant/hassio-homeassistant \ - -t machine --docker-hub homeassistant - displayName: 'Build Release' + dev_version="$(jq --raw-output '.homeassistant.default' dev.json)" + beta_version="$(jq --raw-output '.homeassistant.default' beta.json)" + stable_version="$(jq --raw-output '.homeassistant.default' stable.json)" + if [[ "$version" =~ b ]]; then + sed -i "s|$dev_version|$version|g" dev.json + sed -i "s|$beta_version|$version|g" beta.json + else + sed -i "s|$dev_version|$version|g" dev.json + sed -i "s|$beta_version|$version|g" beta.json + sed -i "s|$stable_version|$version|g" stable.json + fi -- job: 'ReleaseHassio' - condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags'), succeeded('ReleaseDocker')) - dependsOn: - - 'ReleaseDocker' - pool: - vmImage: 'ubuntu-latest' - steps: - - script: | - sudo apt-get install -y --no-install-recommends \ - git jq curl - - git config --global user.name "Pascal Vizeli" - git config --global user.email "pvizeli@syshack.ch" - git config --global credential.helper store - - echo "https://$(githubToken):x-oauth-basic@github.com" > $HOME/.git-credentials - displayName: 'Install requirements' - - script: | - set -e - - version="$(Build.SourceBranchName)" - - git clone https://github.com/home-assistant/hassio-version - cd hassio-version - - dev_version="$(jq --raw-output '.homeassistant.default' dev.json)" - beta_version="$(jq --raw-output '.homeassistant.default' beta.json)" - stable_version="$(jq --raw-output '.homeassistant.default' stable.json)" - - if [[ "$version" =~ b ]]; then - sed -i "s|$dev_version|$version|g" dev.json - sed -i "s|$beta_version|$version|g" beta.json - else - sed -i "s|$dev_version|$version|g" dev.json - sed -i "s|$beta_version|$version|g" beta.json - sed -i "s|$stable_version|$version|g" stable.json - fi - - git commit -am "Bump Home Assistant $version" - git push - displayName: 'Update version files' + git commit -am "Bump Home Assistant $version" + git push + displayName: 'Update version files'