276 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			YAML
		
	
	
			
		
		
	
	
			276 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			YAML
		
	
	
# https://dev.azure.com/home-assistant
 | 
						|
 | 
						|
trigger:
 | 
						|
  tags:
 | 
						|
    include:
 | 
						|
      - '*'
 | 
						|
pr: none
 | 
						|
schedules:
 | 
						|
  - cron: "0 1 * * *"
 | 
						|
    displayName: "nightly builds"
 | 
						|
    branches:
 | 
						|
      include:
 | 
						|
        - dev
 | 
						|
    always: true
 | 
						|
variables:
 | 
						|
  - name: versionBuilder
 | 
						|
    value: '7.2.0'
 | 
						|
  - group: docker
 | 
						|
  - group: github
 | 
						|
  - group: twine
 | 
						|
resources:
 | 
						|
  repositories:
 | 
						|
    - repository: azure
 | 
						|
      type: github
 | 
						|
      name: 'home-assistant/ci-azure'
 | 
						|
      endpoint: 'home-assistant'
 | 
						|
 | 
						|
stages:
 | 
						|
 | 
						|
- stage: 'Validate'
 | 
						|
  jobs:
 | 
						|
  - template: templates/azp-job-version.yaml@azure
 | 
						|
    parameters:
 | 
						|
      ignoreDev: true
 | 
						|
  - job: 'Permission'
 | 
						|
    pool:
 | 
						|
      vmImage: 'ubuntu-latest'
 | 
						|
    steps:
 | 
						|
    - script: |
 | 
						|
        sudo apt-get install -y --no-install-recommends \
 | 
						|
          jq curl
 | 
						|
 | 
						|
        release="$(Build.SourceBranchName)"
 | 
						|
        created_by="$(curl -s https://api.github.com/repos/home-assistant/core/releases/tags/${release} | jq --raw-output '.author.login')"
 | 
						|
 | 
						|
        if [[ "${created_by}" =~ ^(balloob|pvizeli|fabaff|robbiet480|bramkragten|frenck)$ ]]; then
 | 
						|
          exit 0
 | 
						|
        fi
 | 
						|
 | 
						|
        echo "${created_by} is not allowed to create an release!"
 | 
						|
        exit 1        
 | 
						|
      displayName: 'Check rights'
 | 
						|
      condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags'))
 | 
						|
 | 
						|
- stage: 'Build'
 | 
						|
  jobs:
 | 
						|
  - job: 'ReleasePython'
 | 
						|
    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: 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'
 | 
						|
    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,raspberrypi4,odroid-xu,tinker'
 | 
						|
        aarch64:
 | 
						|
          buildArch: 'aarch64'
 | 
						|
          buildMachine: 'qemuarm-64,raspberrypi3-64,raspberrypi4-64,odroid-c2,odroid-n2'
 | 
						|
    steps:
 | 
						|
    - template: templates/azp-step-ha-version.yaml@azure
 | 
						|
    - script: |
 | 
						|
        docker login -u $(dockerUser) -p $(dockerPassword)        
 | 
						|
      displayName: 'Docker hub login'
 | 
						|
    - script: docker pull homeassistant/amd64-builder:$(versionBuilder)
 | 
						|
      displayName: 'Install Builder'
 | 
						|
    - script: |
 | 
						|
        set -e
 | 
						|
 | 
						|
        docker run --rm --privileged \
 | 
						|
          -v ~/.docker:/root/.docker:rw \
 | 
						|
          -v /run/docker.sock:/run/docker.sock:rw \
 | 
						|
          -v $(pwd):/data:ro \
 | 
						|
          homeassistant/amd64-builder:$(versionBuilder) \
 | 
						|
          --generic $(homeassistantRelease) "--$(buildArch)" -t /data \
 | 
						|
 | 
						|
        docker run --rm --privileged \
 | 
						|
          -v ~/.docker:/root/.docker \
 | 
						|
          -v /run/docker.sock:/run/docker.sock:rw \
 | 
						|
          homeassistant/amd64-builder:$(versionBuilder) \
 | 
						|
          --homeassistant-machine "$(homeassistantRelease)=$(buildMachine)" \
 | 
						|
          -r https://github.com/home-assistant/hassio-homeassistant \
 | 
						|
          -t machine --docker-hub homeassistant        
 | 
						|
      displayName: 'Build Release'
 | 
						|
 | 
						|
- stage: 'Publish'
 | 
						|
  jobs:
 | 
						|
  - job: 'ReleaseHassio'
 | 
						|
    pool:
 | 
						|
      vmImage: 'ubuntu-latest'
 | 
						|
    steps:
 | 
						|
    - template: templates/azp-step-ha-version.yaml@azure
 | 
						|
    - 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="$(homeassistantRelease)"
 | 
						|
 | 
						|
        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" =~ d ]]; then
 | 
						|
          sed -i "s|$dev_version|$version|g" dev.json
 | 
						|
        elif [[ "$version" =~ b ]]; then
 | 
						|
          sed -i "s|$beta_version|$version|g" beta.json
 | 
						|
        else
 | 
						|
          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"
 | 
						|
  - job: 'ReleaseDocker'
 | 
						|
    pool:
 | 
						|
      vmImage: 'ubuntu-latest'
 | 
						|
    steps:
 | 
						|
    - template: templates/azp-step-ha-version.yaml@azure
 | 
						|
    - script: |
 | 
						|
        docker login -u $(dockerUser) -p $(dockerPassword)        
 | 
						|
      displayName: 'Docker login'
 | 
						|
    - script: |
 | 
						|
        set -e
 | 
						|
        export DOCKER_CLI_EXPERIMENTAL=enabled
 | 
						|
 | 
						|
        function create_manifest() {
 | 
						|
          local tag_l=$1
 | 
						|
          local tag_r=$2
 | 
						|
 | 
						|
          docker manifest create homeassistant/home-assistant:${tag_l} \
 | 
						|
            homeassistant/amd64-homeassistant:${tag_r} \
 | 
						|
            homeassistant/i386-homeassistant:${tag_r} \
 | 
						|
            homeassistant/armhf-homeassistant:${tag_r} \
 | 
						|
            homeassistant/armv7-homeassistant:${tag_r} \
 | 
						|
            homeassistant/aarch64-homeassistant:${tag_r}
 | 
						|
 | 
						|
          docker manifest annotate homeassistant/home-assistant:${tag_l} \
 | 
						|
            homeassistant/amd64-homeassistant:${tag_r} \
 | 
						|
            --os linux --arch amd64
 | 
						|
 | 
						|
          docker manifest annotate homeassistant/home-assistant:${tag_l} \
 | 
						|
            homeassistant/i386-homeassistant:${tag_r} \
 | 
						|
            --os linux --arch 386
 | 
						|
 | 
						|
          docker manifest annotate homeassistant/home-assistant:${tag_l} \
 | 
						|
            homeassistant/armhf-homeassistant:${tag_r} \
 | 
						|
            --os linux --arch arm --variant=v6
 | 
						|
 | 
						|
          docker manifest annotate homeassistant/home-assistant:${tag_l} \
 | 
						|
            homeassistant/armv7-homeassistant:${tag_r} \
 | 
						|
            --os linux --arch arm --variant=v7
 | 
						|
 | 
						|
          docker manifest annotate homeassistant/home-assistant:${tag_l} \
 | 
						|
            homeassistant/aarch64-homeassistant:${tag_r} \
 | 
						|
            --os linux --arch arm64 --variant=v8
 | 
						|
 | 
						|
          docker manifest push --purge homeassistant/home-assistant:${tag_l}
 | 
						|
        }
 | 
						|
 | 
						|
        docker pull homeassistant/amd64-homeassistant:$(homeassistantRelease)
 | 
						|
        docker pull homeassistant/i386-homeassistant:$(homeassistantRelease)
 | 
						|
        docker pull homeassistant/armhf-homeassistant:$(homeassistantRelease)
 | 
						|
        docker pull homeassistant/armv7-homeassistant:$(homeassistantRelease)
 | 
						|
        docker pull homeassistant/aarch64-homeassistant:$(homeassistantRelease)
 | 
						|
 | 
						|
        # Create version tag
 | 
						|
        create_manifest "$(homeassistantRelease)" "$(homeassistantRelease)"
 | 
						|
 | 
						|
        # Create general tags
 | 
						|
        if [[ "$(homeassistantRelease)" =~ d ]]; then
 | 
						|
          create_manifest "dev" "$(homeassistantRelease)"
 | 
						|
        elif [[ "$(homeassistantRelease)" =~ b ]]; then
 | 
						|
          create_manifest "beta" "$(homeassistantRelease)"
 | 
						|
          create_manifest "rc" "$(homeassistantRelease)"
 | 
						|
        else
 | 
						|
          create_manifest "stable" "$(homeassistantRelease)"
 | 
						|
          create_manifest "latest" "$(homeassistantRelease)"
 | 
						|
          create_manifest "beta" "$(homeassistantRelease)"
 | 
						|
          create_manifest "rc" "$(homeassistantRelease)"
 | 
						|
        fi        
 | 
						|
 | 
						|
      displayName: 'Create Meta-Image'
 | 
						|
 | 
						|
- stage: 'Addidional'
 | 
						|
  jobs:
 | 
						|
  - job: 'Updater'
 | 
						|
    pool:
 | 
						|
      vmImage: 'ubuntu-latest'
 | 
						|
    variables:
 | 
						|
    - group: gcloud
 | 
						|
    steps:
 | 
						|
    - template: templates/azp-step-ha-version.yaml@azure
 | 
						|
    - script: |
 | 
						|
        set -e
 | 
						|
 | 
						|
        export CLOUDSDK_CORE_DISABLE_PROMPTS=1
 | 
						|
 | 
						|
        curl -o google-cloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
 | 
						|
        tar -C . -xvf google-cloud-sdk.tar.gz
 | 
						|
        rm -f google-cloud-sdk.tar.gz
 | 
						|
        ./google-cloud-sdk/install.sh        
 | 
						|
      displayName: 'Setup gCloud'
 | 
						|
      condition: eq(variables['homeassistantReleaseStable'], 'true')
 | 
						|
    - script: |
 | 
						|
        set -e
 | 
						|
 | 
						|
        export CLOUDSDK_CORE_DISABLE_PROMPTS=1
 | 
						|
 | 
						|
        echo "$(gcloudAnalytic)" > gcloud_auth.json
 | 
						|
        ./google-cloud-sdk/bin/gcloud auth activate-service-account --key-file gcloud_auth.json
 | 
						|
        rm -f gcloud_auth.json        
 | 
						|
      displayName: 'Auth gCloud'
 | 
						|
      condition: eq(variables['homeassistantReleaseStable'], 'true')
 | 
						|
    - script: |
 | 
						|
        set -e
 | 
						|
 | 
						|
        export CLOUDSDK_CORE_DISABLE_PROMPTS=1
 | 
						|
 | 
						|
        ./google-cloud-sdk/bin/gcloud functions deploy Analytics-Receiver \
 | 
						|
          --project home-assistant-analytics \
 | 
						|
          --update-env-vars VERSION=$(homeassistantRelease) \
 | 
						|
          --source gs://analytics-src/function-source.zip        
 | 
						|
      displayName: 'Push details to updater'
 | 
						|
      condition: eq(variables['homeassistantReleaseStable'], 'true')
 |