Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions .github/workflows/build-app.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
name: Build app

on:
workflow_call:
inputs:
app:
required: true
type: string
publish:
required: true
type: boolean

jobs:
prepare:
name: Prepare
if: github.repository == 'WillCodeForCats/tekmar-packetserv'
runs-on: ubuntu-latest
outputs:
architectures: ${{ steps.info.outputs.architectures }}
build_matrix: ${{ steps.matrix.outputs.matrix }}
image_name: ${{ steps.normalize.outputs.image_name }}
name: ${{ steps.normalize.outputs.name }}
description: ${{ steps.normalize.outputs.description }}
url: ${{ steps.normalize.outputs.url }}
registry_prefix: ${{ steps.normalize.outputs.registry_prefix }}
version: ${{ steps.normalize.outputs.version }}
steps:
- name: Check out the repository
uses: actions/checkout@v6.0.2

- name: Get app information
id: info
uses: home-assistant/actions/helpers/info@master
with:
path: "./${{ inputs.app }}"

- name: Normalize app information
id: normalize
run: |
image=${{ steps.info.outputs.image }}
echo "image_name=${image##*/}" >> "$GITHUB_OUTPUT"
echo "registry_prefix=${image%/*}" >> "$GITHUB_OUTPUT"
version=${{ steps.info.outputs.version }}
echo "version=${version}" >> "$GITHUB_OUTPUT"
name=${{ steps.info.outputs.name }}
echo "name=${name}" >> "$GITHUB_OUTPUT"
description=${{ steps.info.outputs.description }}
echo "description=${description}" >> "$GITHUB_OUTPUT"
url=${{ steps.info.outputs.url }}
if [[ -n "$url" && "$url" != "null" ]]; then
echo "url=${url}" >> "$GITHUB_OUTPUT"
fi

- name: Prepare build matrix
id: matrix
uses: home-assistant/builder/actions/prepare-multi-arch-matrix@2026.03.2
with:
architectures: ${{ steps.info.outputs.architectures }}
image-name: ${{ steps.normalize.outputs.image_name }}
registry-prefix: ${{ steps.normalize.outputs.registry_prefix }}

build:
name: Build ${{ matrix.arch }} image
needs: prepare
runs-on: ${{ matrix.os }}
permissions:
contents: read
id-token: write
packages: write
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.prepare.outputs.build_matrix) }}
steps:
- name: Check out the repository
uses: actions/checkout@v6.0.2
with:
persist-credentials: false

- name: Build image
uses: home-assistant/builder/actions/build-image@2026.03.2
with:
arch: ${{ matrix.arch }}
container-registry-password: ${{ secrets.GITHUB_TOKEN }}
context: "./${{ inputs.app }}"
image: ${{ matrix.image }}
image-tags: |
${{ needs.prepare.outputs.version }}
latest
labels: |
io.hass.type=app
io.hass.name=${{ needs.prepare.outputs.name }}
io.hass.description=${{ needs.prepare.outputs.description }}
${{ needs.prepare.outputs.url && format('io.hass.url={0}', needs.prepare.outputs.url) || '' }}
push: ${{ inputs.publish }}
version: ${{ needs.prepare.outputs.version }}

manifest:
name: Publish multi-arch manifest
needs: [prepare, build]
if: inputs.publish
runs-on: ubuntu-latest
permissions:
id-token: write
packages: write
steps:
- name: Publish multi-arch manifest
uses: home-assistant/builder/actions/publish-multi-arch-manifest@2026.03.2
with:
architectures: ${{ needs.prepare.outputs.architectures }}
container-registry-password: ${{ secrets.GITHUB_TOKEN }}
image-name: ${{ needs.prepare.outputs.image_name }}
image-tags: |
${{ needs.prepare.outputs.version }}
latest
registry-prefix: ${{ needs.prepare.outputs.registry_prefix }}
126 changes: 48 additions & 78 deletions .github/workflows/builder.yaml
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
name: Builder

env:
BUILD_ARGS: "--test"
MONITORED_FILES: "build.yaml config.json Dockerfile run.sh"
MONITORED_FILES: "config.json config.yaml config.yml Dockerfile rootfs"

on:
push:
pull_request:
branches:
- main
pull_request:
push:
branches:
- main

permissions:
contents: read

jobs:
init:
runs-on: ubuntu-latest
name: Initialize builds
runs-on: ubuntu-latest
outputs:
changed_addons: ${{ steps.changed_addons.outputs.addons }}
changed: ${{ steps.changed_addons.outputs.changed }}
changed: ${{ steps.filter.outputs.changed }}
changed_apps: ${{ steps.filter.outputs.changed_apps }}
steps:
- name: Check out the repository
uses: actions/checkout@v6.0.2
Expand All @@ -27,85 +29,53 @@ jobs:
id: changed_files
uses: tj-actions/changed-files@v47

- name: Find add-on directories
id: addons
- name: Find app directories
id: apps
uses: home-assistant/actions/helpers/find-addons@master

- name: Get changed add-ons
id: changed_addons
- name: Filter changed apps
id: filter
env:
APPS: ${{ steps.apps.outputs.addons }}
CHANGED_FILES: ${{ steps.changed_files.outputs.all_changed_files }}
run: |
declare -a changed_addons
for addon in ${{ steps.addons.outputs.addons }}; do
if [[ "${{ steps.changed_files.outputs.all_changed_files }}" =~ $addon ]]; then
for file in ${{ env.MONITORED_FILES }}; do
if [[ "${{ steps.changed_files.outputs.all_changed_files }}" =~ $addon/$file ]]; then
if [[ ! "${changed_addons[@]}" =~ $addon ]]; then
changed_addons+=("\"${addon}\",");
fi
fi
done
fi
done
changed_apps=()

changed=$(echo ${changed_addons[@]} | rev | cut -c 2- | rev)
# If the workflow file itself changed, rebuild all apps
if [[ "${CHANGED_FILES}" =~ \.github/workflows/(builder|build-app)\.yaml ]]; then
changed_apps=(${APPS})
else
for app in ${APPS}; do
for file in ${MONITORED_FILES}; do
if [[ "${CHANGED_FILES}" =~ ${app}/${file} ]]; then
changed_apps+=("${app}")
break
fi
done
done
fi

if [[ -n ${changed} ]]; then
echo "Changed add-ons: $changed";
echo "changed=true" >> $GITHUB_OUTPUT;
echo "addons=[$changed]" >> $GITHUB_OUTPUT;
if [[ ${#changed_apps[@]} -gt 0 ]]; then
echo "changed=true" >> "$GITHUB_OUTPUT"
echo "changed_apps=$(jq -nc '$ARGS.positional' --args "${changed_apps[@]}")" >> "$GITHUB_OUTPUT"
else
echo "No add-on had any monitored files changed (${{ env.MONITORED_FILES }})";
echo "changed=false" >> "$GITHUB_OUTPUT"
fi
build:

build-app:
name: Build ${{ matrix.app }}
needs: init
runs-on: ubuntu-latest
if: needs.init.outputs.changed == 'true'
name: Build ${{ matrix.arch }} ${{ matrix.addon }} add-on
permissions:
contents: read
id-token: write
packages: write
strategy:
fail-fast: false
matrix:
addon: ${{ fromJson(needs.init.outputs.changed_addons) }}
arch: ["aarch64", "amd64"]

steps:
- name: Check out repository
uses: actions/checkout@v6.0.2

- name: Get information
id: info
uses: home-assistant/actions/helpers/info@master
with:
path: "./${{ matrix.addon }}"

- name: Check if add-on should be built
id: check
run: |
if [[ "${{ steps.info.outputs.architectures }}" =~ ${{ matrix.arch }} ]]; then
echo "build_arch=true" >> $GITHUB_OUTPUT;
echo "image=$(echo ${{ steps.info.outputs.image }} | cut -d'/' -f3)" >> $GITHUB_OUTPUT;
if [[ -z "${{ github.head_ref }}" ]] && [[ "${{ github.event_name }}" == "push" ]]; then
echo "BUILD_ARGS=" >> $GITHUB_ENV;
fi
else
echo "${{ matrix.arch }} is not a valid arch for ${{ matrix.addon }}, skipping build";
echo "build_arch=false" >> $GITHUB_OUTPUT;
fi

- name: Login to GitHub Container Registry
if: env.BUILD_ARGS != '--test'
uses: docker/login-action@v4.1.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build ${{ matrix.addon }} add-on
if: steps.check.outputs.build_arch == 'true'
uses: home-assistant/builder@2026.03.2
with:
args: |
${{ env.BUILD_ARGS }} \
--${{ matrix.arch }} \
--target /data/${{ matrix.addon }} \
--image "${{ steps.check.outputs.image }}" \
--docker-hub "ghcr.io/${{ github.repository_owner }}" \
--addon
app: ${{ fromJSON(needs.init.outputs.changed_apps) }}
uses: ./.github/workflows/build-app.yaml
with:
app: ${{ matrix.app }}
publish: ${{ github.event_name == 'push' }}
secrets: inherit
8 changes: 4 additions & 4 deletions .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,20 @@ on:

jobs:
find:
name: Find add-ons
name: Find apps
runs-on: ubuntu-latest
outputs:
addons: ${{ steps.addons.outputs.addons_list }}
steps:
- name: ⤵️ Check out code from GitHub
uses: actions/checkout@v6.0.2

- name: 🔍 Find add-on directories
- name: 🔍 Find app directories
id: addons
uses: home-assistant/actions/helpers/find-addons@master

lint:
name: Lint add-on ${{ matrix.path }}
name: Lint app ${{ matrix.path }}
runs-on: ubuntu-latest
needs: find
strategy:
Expand All @@ -35,7 +35,7 @@ jobs:
- name: ⤵️ Check out code from GitHub
uses: actions/checkout@v6.0.2

- name: 🚀 Run Home Assistant Add-on Lint
- name: 🚀 Run Home Assistant App Lint
uses: frenck/action-addon-linter@v2.21
with:
path: "./${{ matrix.path }}"
5 changes: 0 additions & 5 deletions repository.json

This file was deleted.

3 changes: 3 additions & 0 deletions repository.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name: Tekmar Packet Server
url: "https://github.com/WillCodeForCats/tekmar-packetserv"
maintainer: Seth Mattinen <sethm@rollernet.us>
6 changes: 6 additions & 0 deletions tekmar_packetserv/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## 1.3.3
- Update to base 3.23
- Addons are now Apps
- Bind socket to docker container IP
- Migrate from deprecated home-assistant/builder action

## 1.3.2
- Detect IPv4 mapped IPv6
- Additional logging
Expand Down
10 changes: 8 additions & 2 deletions tekmar_packetserv/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ARG BUILD_FROM
FROM $BUILD_FROM
ARG BUILD_FROM=ghcr.io/home-assistant/base:3.23
FROM ${BUILD_FROM}

# Add env
ENV LANG=C.UTF-8
Expand All @@ -9,3 +9,9 @@ RUN apk add --no-cache python3 py3-pyserial

# Copy data
COPY rootfs /

LABEL \
org.opencontainers.image.title="Home Assistant App: Tekmar Packet Server" \
org.opencontainers.image.description="Communicate with the Tekmar Gateway 482" \
org.opencontainers.image.source="https://github.com/WillCodeForCats/tekmar-packetserv" \
org.opencontainers.image.licenses="MIT License"
9 changes: 0 additions & 9 deletions tekmar_packetserv/build.yaml

This file was deleted.

4 changes: 2 additions & 2 deletions tekmar_packetserv/config.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"name": "Tekmar Packet Server",
"version": "1.3.2",
"version": "1.3.3",
"url": "https://github.com/WillCodeForCats/tekmar-packetserv",
"slug": "tekmar_packetserv",
"description": "Connect with the Tekmar Gateway 482",
"arch": ["aarch64", "amd64"],
"image": "ghcr.io/willcodeforcats/{arch}-tekmar-packetserv",
"image": "ghcr.io/willcodeforcats/tekmar-packetserv",
"init": false,
"options": {
"serial_mode": "Device",
Expand Down
Loading