diff --git a/.hadolint.yaml b/.hadolint.yaml new file mode 100644 index 000000000..128471607 --- /dev/null +++ b/.hadolint.yaml @@ -0,0 +1,5 @@ +ignored: + - DL3018 + - DL3006 + - DL3013 + - SC2155 diff --git a/README.md b/README.md index 2f355e419..f79d8d17d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![Build Status](https://dev.azure.com/home-assistant/Home%20Assistant/_apis/build/status/home-assistant.hassio?branchName=dev)](https://dev.azure.com/home-assistant/Home%20Assistant/_build/latest?definitionId=2&branchName=dev) + # Hass.io ## First private cloud solution for home automation diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0c1a6f471..4f89bd810 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,45 +1,130 @@ -# Python package -# Create and test a Python package on multiple Python versions. -# Add steps that analyze code, save the dist with the build record, publish to a PyPI-compatible index, and more: -# https://docs.microsoft.com/azure/devops/pipelines/languages/python +# https://dev.azure.com/home-assistant trigger: -- master -- dev - + branches: + include: + - master + - dev + tags: + include: + - '*' + exclude: + - untagged* pr: - dev +variables: + versionHadolint: v1.16.3 + versionBuilder: 1.1 + jobs: -- job: "Tox" - +- job: 'Tox' pool: vmImage: 'ubuntu-16.04' - steps: - task: UsePythonVersion@0 displayName: 'Use Python $(python.version)' inputs: versionSpec: '3.7' - - script: pip install tox displayName: 'Install Tox' - - script: tox displayName: 'Run Tox' -- job: "JQ" - +- job: 'JQ' pool: vmImage: 'ubuntu-16.04' - 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-16.04' + 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' + + +- job: 'ReleaseDEV' + condition: and(eq(variables['Build.SourceBranchName'], 'dev'), succeeded('JQ'), succeeded('Tox'), succeeded('Hadolint')) + dependsOn: + - 'JQ' + - 'Tox' + - 'Hadolint' + pool: + vmImage: 'ubuntu-16.04' + strategy: + maxParallel: 2 + matrix: + amd64: + buildArch: 'amd64' + i386: + buildArch: 'i386' + armhf: + buildArch: 'armhf' + armv7: + buildArch: 'armv7' + aarch64: + buildArch: 'aarch64' + 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 "--$(buildArch)" \ + -t /data --version dev --docker-hub homeassistant + displayName: 'Build DEV' + + +- job: 'Release' + condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags'), succeeded('JQ'), succeeded('Tox'), succeeded('Hadolint')) + dependsOn: + - 'JQ' + - 'Tox' + - 'Hadolint' + pool: + vmImage: 'ubuntu-16.04' + strategy: + maxParallel: 5 + matrix: + amd64: + buildArch: 'amd64' + i386: + buildArch: 'i386' + armhf: + buildArch: 'armhf' + armv7: + buildArch: 'armv7' + aarch64: + buildArch: 'aarch64' + 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 "--$(buildArch)" \ + -t /data --docker-hub homeassistant + displayName: 'Build Release' diff --git a/hassio/api/ingress.py b/hassio/api/ingress.py index cabbb1fd5..438fa81d9 100644 --- a/hassio/api/ingress.py +++ b/hassio/api/ingress.py @@ -209,8 +209,8 @@ def _is_websocket(request: web.Request) -> bool: headers = request.headers if ( - headers.get(hdrs.CONNECTION) == "Upgrade" - and headers.get(hdrs.UPGRADE) == "websocket" + "upgrade" in headers.get(hdrs.CONNECTION, "").lower() + and headers.get(hdrs.UPGRADE, "").lower() == "websocket" ): return True return False diff --git a/hassio/const.py b/hassio/const.py index df598d065..cc333bf58 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -3,7 +3,7 @@ from pathlib import Path from ipaddress import ip_network -HASSIO_VERSION = "159" +HASSIO_VERSION = "160" URL_HASSIO_ADDONS = "https://github.com/home-assistant/hassio-addons" URL_HASSIO_VERSION = "https://s3.amazonaws.com/hassio-version/{channel}.json"