https://github.com/home-assistant/builder
Home Assistant builder script
https://github.com/home-assistant/builder
docker
Last synced: 2 days ago
JSON representation
Home Assistant builder script
- Host: GitHub
- URL: https://github.com/home-assistant/builder
- Owner: home-assistant
- License: apache-2.0
- Created: 2019-04-14T21:31:55.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-10-07T06:39:31.000Z (5 months ago)
- Last Synced: 2024-10-29T15:31:28.170Z (4 months ago)
- Topics: docker
- Language: Shell
- Homepage:
- Size: 195 KB
- Stars: 69
- Watchers: 8
- Forks: 58
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Home Assistant builder
_Multi-purpose cross-compile docker builder._
## GitHub Action
You can use this repository as a GitHub action to test and/or publish your builds.
Use the `with.args` key to pass in arguments to the builder, to see what arguments are supported you can look at the [arguments](#Arguments) section.
### Cosign support
You can use cosign to signing and verify the build chain. To sign the image, use `--cosign` and attach following options to the github action:
```yaml
jobs:
build:
name: Test build
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
```For keep a trust-chain during the built, you need set `identity` and `base_identity` to your build.yml
### Test action example
```yaml
name: "Test"on: [push, pull_request]
jobs:
build:
name: Test build
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3
- name: Test build
uses: home-assistant/builder@master
with:
args: |
--test \
--all \
--target addon-folder \
--docker-hub user-name-or-space-name
```### Publish action example
```yaml
name: "Publish"on:
release:
types: [published]jobs:
publish:
name: Publish
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Publish
uses: home-assistant/builder@master
with:
args: |
--all \
--target addon-folder \
--docker-hub user-name-or-space-name
```## Arguments
```
Options:
-h, --help
Display this help and exit.Repository / Data
-r, --repository
Set git repository to load data from.
-b, --branch
Set git branch for repository.
-t, --target
Set local folder or path inside repository for build.Version/Image handling
-v, --version
Overwrite version/tag of build.
-i, --image
Overwrite image name of build / support {arch}.
--release
Additional version information like for base images.
--release-tag
Use this as main tag.
--additional-tag
Add additional tags that will be published
--version-from
Use this to set build_from tag if not specified.Architecture
--armhf
Build for arm v6.
--armv7
Build for arm v7.
--amd64
Build for intel/amd 64bit.
--aarch64
Build for arm 64bit.
--i386
Build for intel/amd 32bit.
--all
Build all architecture.Build handling
--test
Disable push to dockerhub.
--no-latest
Do not tag images as latest.
--no-cache
Disable cache for the build (from latest).
--self-cache
Use same tag as cache tag instead latest.
--cache-tag
Use a custom tag for the build cache.
-d, --docker-hub
Set or overwrite the docker repository.
--docker-hub-check
Check if the version already exists before starting the build.
--docker-user
Username to login into docker with
--docker-password
Password to login into docker withUse the host docker socket if mapped into container:
/var/run/docker.sockInternals:
--addon
Default on. Run all things for an addon build.
--generic
Build based on the build.json
--base
Build our base images.
--machine
Build the machine based image for a release/landingpage.Security:
--cosign
Enable signing images with cosign.
```## Local installation
amd64:
```bash
docker pull ghcr.io/home-assistant/amd64-builder:latest
```armv7:
```bash
docker pull ghcr.io/home-assistant/armv7-builder:latest
```aarch64:
```bash
docker pull ghcr.io/home-assistant/aarch64-builder:latest
```## Run
**For remote git repository:**
```bash
docker run \
--rm \
--privileged \
-v ~/.docker:/root/.docker \
ghcr.io/home-assistant/amd64-builder:latest \
--all \
-t addon-folder \
-r https://github.com/xy/addons \
-b branchname
```**For local git repository:**
```bash
docker run \
--rm \
--privileged \
-v ~/.docker:/root/.docker \
-v /my_addon:/data \
ghcr.io/home-assistant/amd64-builder:latest \
--all \
-t /data
```## Docker Daemon
By default, the image will run docker-in-docker. You can use the host docker daemon by bind mounting the host docker socket to `/var/run/docker.sock` inside the container. For example, to do this with the _Local repository_ example above (assuming the host docker socket is at `/var/run/docker.sock`:
```bash
docker run \
--rm \
--privileged \
-v ~/.docker:/root/.docker \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /my_addon:/data \
ghcr.io/home-assistant/amd64-builder:latest \
--all \
-t /data
```### Using shell alias
On Linux, it can be helpful to use a shell alias to run the builder from the
current directory. E.g. by adding the following function to your `~/.bashrc`:```
function builder() {
docker run \
--rm \
-it \
--privileged \
-v ${PWD}:/data \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
ghcr.io/home-assistant/amd64-builder:latest --target /data $@
}
```This allows to build add-ons e.g. for a single architecture as follow:
```
$ cd /path/to/your/add-on
$ builder --amd64 --docker-hub agners
```## Help
```bash
docker run --rm --privileged ghcr.io/home-assistant/amd64-builder:latest --help
```