Skip to content

Rewrite of entry.sh to make it more robust and modular #388

Rewrite of entry.sh to make it more robust and modular

Rewrite of entry.sh to make it more robust and modular #388

Workflow file for this run

# This is a basic workflow to help you get started with Actions
name: Build and Test
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the dev branch
push:
branches:
- "dev*" # Support wildcard matching
- "master"
pull_request:
branches: [ dev ]
release:
types: # This configuration does not affect the page_build event above
- published
- released
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
test_build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
strategy:
matrix:
dockerfile: [Dockerfile, Dockerfile-bullseye]
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Checkout this repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Inject slug/short variables
uses: rlespinasse/github-slug-action@v4.4.1
- name: Get git vars
shell: bash
run: |
echo "IMAGE_VERSION=$( git describe --tags --dirty --match "v[0-9]*")" >> $GITHUB_OUTPUT
id: gitVars
- name: Prepare docker for build and publish
id: prepareDOCKER
uses: ./.github/workflows/prepare-docker
with:
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
GHCR_OWNER: ${{ github.repository_owner }}
GHCR_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DOCKERFILE: ${{ matrix.dockerfile }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/${{ github.repository_owner }}/fhem-docker
fhem/fhem
flavor: |
latest= ${{ fromJSON('["auto", "false"]')[github.event.release.prerelease == 1 || endsWith(matrix.dockerfile, 'Dockerfile')] }}
tags: |
type=semver,pattern={{version}},suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
type=semver,pattern={{major}},enable=${{ github.event.release.prerelease == 0 }},suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
type=ref,event=branch,suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
type=ref,event=pr,suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
- name: Build for bats test full blown amd64
uses: docker/build-push-action@v5
id: docker_build_bats
with:
context: .
load: true
file: ./${{ matrix.dockerfile }}
platforms: linux/amd64
push: false
target: with-fhem-bats
cache-from: |
type=gha,scope=full_linux/amd64-${{ matrix.dockerfile }}
cache-to: type=gha,mode=max,scope=full_linux/amd64-${{ matrix.dockerfile }}
tags: bats-withfhem
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BUILD_DATE=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
IMAGE_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
IMAGE_VCS_REF=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
L_USAGE=${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/README.md
L_VCS_URL=${{ github.server_url }}/${{ github.repository }}/
L_AUTHORS=${{ github.server_url }}/${{ github.repository }}/graphs/contributors
IMAGE_LAYER_SYS_EXT=1
IMAGE_LAYER_PERL_EXT=1
IMAGE_LAYER_DEV=1
IMAGE_LAYER_PERL_CPAN=1
IMAGE_LAYER_PERL_CPAN_EXT=1
IMAGE_LAYER_PYTHON=1
IMAGE_LAYER_PYTHON_EXT=1
IMAGE_LAYER_NODEJS=1
IMAGE_LAYER_NODEJS_EXT=0
- name: Run bats unittetss
run: |
docker run --rm -v "${PWD}/src/tests/bats:/code" bats-withfhem:latest -t .
- name: Build for test full blown amd64
uses: docker/build-push-action@v5
id: docker_build
with:
context: .
load: true
file: ./${{ matrix.dockerfile }}
platforms: linux/amd64
push: false
target: with-fhem
cache-from: |
type=gha,scope=full_linux/amd64-${{ matrix.dockerfile }}
cache-to: type=gha,mode=max,scope=full_linux/amd64-${{ matrix.dockerfile }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BUILD_DATE=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
IMAGE_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
IMAGE_VCS_REF=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
L_USAGE=${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/README.md
L_VCS_URL=${{ github.server_url }}/${{ github.repository }}/
L_AUTHORS=${{ github.server_url }}/${{ github.repository }}/graphs/contributors
FHEM_VERSION=${{ steps.buildVars.outputs.VARIANT_FHEM }}
VCS_REF=${{ steps.buildVars.outputs.FHEM_REVISION_LATEST }}
IMAGE_LAYER_SYS_EXT=1
IMAGE_LAYER_PERL_EXT=1
IMAGE_LAYER_DEV=1
IMAGE_LAYER_PERL_CPAN=1
IMAGE_LAYER_PERL_CPAN_EXT=1
IMAGE_LAYER_PYTHON=1
IMAGE_LAYER_PYTHON_EXT=1
IMAGE_LAYER_NODEJS=1
IMAGE_LAYER_NODEJS_EXT=0
- name: Inspect and run integration tests
run: |
docker image inspect ${{ fromJSON(steps.meta.outputs.json).tags[0] }}
./scripts/test-integration.sh;
- name: Run build in unittests
run: |
CONTAINER=$(docker run -d -ti --health-interval=10s --health-timeout=8s --health-start-period=10s --health-retries=5 -e CPAN_PKGS=Test2::Suite ${{ fromJSON(steps.meta.outputs.json).tags[0] }} )
sleep 15;
until [ "$(/usr/bin/docker inspect -f {{.State.Health.Status}} $CONTAINER)" == "healthy" ];
do sleep 1;
echo -n ".";
done;
echo -e "\n"
docker exec ${CONTAINER} /bin/bash -c 'prove --recurse /opt/fhem/t/FHEM' || true
docker container rm $CONTAINER --force --volumes
published_build:
runs-on: ubuntu-latest
needs: test_build
strategy:
matrix:
dockerfile: [Dockerfile, Dockerfile-bullseye]
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Checkout this repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Inject slug/short variables
uses: rlespinasse/github-slug-action@v4.4.1
- name: Get git vars
shell: bash
run: |
echo "IMAGE_VERSION=$( git describe --tags --dirty --match "v[0-9]*")" >> $GITHUB_OUTPUT
id: gitVars
- name: Prepare SVN repository checkout and variables
id: prepareSVN
uses: ./.github/workflows/prepare-svn
- name: Prepare docker for build and publish
id: prepareDOCKER
uses: ./.github/workflows/prepare-docker
with:
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
GHCR_OWNER: ${{ github.repository_owner }}
GHCR_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DOCKERFILE: ${{ matrix.dockerfile }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/${{ github.repository_owner }}/fhem-docker
fhem/fhem
flavor: |
latest= ${{ fromJSON('["auto", "false"]')[github.event.release.prerelease == 1] }}
tags: |
type=semver,pattern={{version}},suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
type=semver,pattern={{major}},enable=${{ github.event.release.prerelease == 0 }},suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
type=ref,event=branch,suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }},enable=${{ github.event.release.prerelease == 0 && env.GITHUB_REF_SLUG != 'master' }}
type=ref,event=pr,suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
type=raw,enable=${{ env.GITHUB_REF_SLUG == 'master' }},priority=200,prefix=,suffix=${{ fromJSON('["bullseye", "buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }},value=
- name: Build and push cross compiled full blown image on supported platforms
uses: docker/build-push-action@v5
id: docker_build
with:
context: .
load: false
file: ./${{ matrix.dockerfile }}
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
target: with-fhem
cache-from: |
type=gha,scope=full_linux/amd64-${{ matrix.dockerfile }}
type=gha,scope=full_linux/cross-${{ matrix.dockerfile }}
cache-to: type=gha,mode=max,scope=full_linux/cross-${{ matrix.dockerfile }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BUILD_DATE=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
IMAGE_VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
IMAGE_VCS_REF=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
L_USAGE=${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/README.md
L_VCS_URL=${{ github.server_url }}/${{ github.repository }}/
L_AUTHORS=${{ github.server_url }}/${{ github.repository }}/graphs/contributors
FHEM_VERSION=${{ steps.buildVars.outputs.VARIANT_FHEM }}
VCS_REF=${{ steps.buildVars.outputs.FHEM_REVISION_LATEST }}
IMAGE_LAYER_SYS_EXT=1
IMAGE_LAYER_PERL_EXT=1
IMAGE_LAYER_DEV=1
IMAGE_LAYER_PERL_CPAN=1
IMAGE_LAYER_PERL_CPAN_EXT=1
IMAGE_LAYER_PYTHON=1
IMAGE_LAYER_PYTHON_EXT=1
IMAGE_LAYER_NODEJS=1
IMAGE_LAYER_NODEJS_EXT=0
L_DESCR=A full blown Docker image for FHEM house automation system, based on Debian ${{ fromJSON('["bullseye", "buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}.
- name: Docker meta
id: meta_base
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/${{ github.repository_owner }}/fhem-minimal-docker
fhem/fhem-minimal
flavor: |
latest= ${{ fromJSON('["auto", "false"]')[github.event.release.prerelease == 1] }}
tags: |
type=semver,pattern={{version}},suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
type=semver,pattern={{major}},enable=${{ github.event.release.prerelease == 0 }},suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
type=ref,event=branch,suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }},enable=${{ github.event.release.prerelease == 0 && env.GITHUB_REF_SLUG != 'master' }}
type=ref,event=pr,suffix=${{ fromJSON('["-bullseye", "-buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}
type=raw,enable=${{ env.GITHUB_REF_SLUG == 'master' }},priority=200,prefix=,suffix=${{ fromJSON('["bullseye", "buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }},value=
- name: Build and push cross compiled base image on supported platforms
uses: docker/build-push-action@v5
id: docker_build_base
with:
context: .
load: false
file: ./${{ matrix.dockerfile }}
platforms: linux/386,linux/amd64,linux/arm/v7,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
target: with-fhem
cache-from: |
type=gha,scope=full_linux/amd64-${{ matrix.dockerfile }}
type=gha,scope=full_linux/cross-${{ matrix.dockerfile }}
type=gha,scope=base_linux/cross-${{ matrix.dockerfile }}
cache-to: type=gha,mode=max,scope=base_linux/cross-${{ matrix.dockerfile }}
tags: ${{ steps.meta_base.outputs.tags }}
labels: ${{ steps.meta_base.outputs.labels }}
build-args: |
BUILD_DATE=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
IMAGE_VERSION=${{ fromJSON(steps.meta_base.outputs.json).labels['org.opencontainers.image.version'] }}
IMAGE_VCS_REF=${{ fromJSON(steps.meta_base.outputs.json).labels['org.opencontainers.image.revision'] }}
L_USAGE=${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/README.md
L_VCS_URL=${{ github.server_url }}/${{ github.repository }}/
L_AUTHORS=${{ github.server_url }}/${{ github.repository }}/graphs/contributors
FHEM_VERSION=${{ steps.buildVars.outputs.VARIANT_FHEM }}
VCS_REF=${{ steps.buildVars.outputs.FHEM_REVISION_LATEST }}
IMAGE_LAYER_SYS_EXT=0
IMAGE_LAYER_PERL_EXT=1
IMAGE_LAYER_DEV=0
IMAGE_LAYER_PERL_CPAN=1
IMAGE_LAYER_PERL_CPAN_EXT=0
IMAGE_LAYER_PYTHON=0
IMAGE_LAYER_PYTHON_EXT=0
IMAGE_LAYER_NODEJS=0
IMAGE_LAYER_NODEJS_EXT=0
L_DESCR=A minimal (perl) Docker image for FHEM house automation system, based on Debian ${{ fromJSON('["bullseye", "buster"]')[endsWith(matrix.dockerfile, 'Dockerfile')] }}.