update act runner addons
This commit is contained in:
parent
ee66b044c3
commit
f7f4e7393a
80
example/.README.j2
Normal file
80
example/.README.j2
Normal file
@ -0,0 +1,80 @@
|
||||
# Home Assistant Community Add-on: Example
|
||||
|
||||
[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
|
||||
|
||||
[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
|
||||
|
||||
[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
|
||||
|
||||
[![Support Frenck on Patreon][patreon-shield]][patreon]
|
||||
|
||||
Example add-on by Community Home Assistant add-ons.
|
||||
|
||||
## About
|
||||
|
||||
This is an example add-on for Home Assistant. When started, it displays a
|
||||
random quote every 5 seconds.
|
||||
|
||||
It shows off several features and structures like:
|
||||
|
||||
- Full blown GitHub repository.
|
||||
- General Dockerfile structure and setup.
|
||||
- The use of the `config.yaml` and `build.yaml` files.
|
||||
- General shell scripting structure (`run.sh`).
|
||||
- Quality assurance using CodeClimate.
|
||||
- Continuous integration and deployment using GitLab.
|
||||
- Usage of the Community Home Assistant Add-ons build environment.
|
||||
- Small use of the Bash function library in our base images.
|
||||
- The use of Docker label schema.
|
||||
|
||||
{% if channel == "edge" %}
|
||||
## WARNING! THIS IS AN EDGE VERSION!
|
||||
|
||||
This Home Assistant Add-ons repository contains edge builds of add-ons.
|
||||
Edge builds add-ons are based upon the latest development version.
|
||||
|
||||
- They may not work at all.
|
||||
- They might stop working at any time.
|
||||
- They could have a negative impact on your system.
|
||||
|
||||
This repository was created for:
|
||||
|
||||
- Anybody willing to test.
|
||||
- Anybody interested in trying out upcoming add-ons or add-on features.
|
||||
- Developers.
|
||||
|
||||
If you are more interested in stable releases of our add-ons:
|
||||
|
||||
<https://github.com/hassio-addons/repository>
|
||||
|
||||
{% endif %}
|
||||
{% if channel == "beta" %}
|
||||
## WARNING! THIS IS A BETA VERSION!
|
||||
|
||||
This Home Assistant Add-ons repository contains beta releases of add-ons.
|
||||
|
||||
- They might stop working at any time.
|
||||
- They could have a negative impact on your system.
|
||||
|
||||
This repository was created for:
|
||||
|
||||
- Anybody willing to test.
|
||||
- Anybody interested in trying out upcoming add-ons or add-on features.
|
||||
|
||||
If you are more interested in stable releases of our add-ons:
|
||||
|
||||
<https://github.com/hassio-addons/repository>
|
||||
|
||||
{% endif %}
|
||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||
[forum]: https://community.home-assistant.io?u=frenck
|
||||
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
|
||||
[github-sponsors]: https://github.com/sponsors/frenck
|
||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2024.svg
|
||||
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
|
||||
[patreon]: https://www.patreon.com/frenck
|
||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
|
||||
[release-shield]: https://img.shields.io/badge/version-{{ version }}-blue.svg
|
||||
[release]: {{ repo }}/tree/{{ version }}
|
139
example/DOCS.md
Normal file
139
example/DOCS.md
Normal file
@ -0,0 +1,139 @@
|
||||
# Home Assistant Community Add-on: Example
|
||||
|
||||
This is an example add-on for Home Assistant. When started, it displays a
|
||||
random quote every 5 seconds.
|
||||
|
||||
It shows off several features and structures like:
|
||||
|
||||
- Full blown GitHub repository.
|
||||
- General Dockerfile structure and setup.
|
||||
- The use of the `config.yaml` and `build.yaml` files.
|
||||
- General shell scripting structure (`run.sh`).
|
||||
- Quality assurance using CodeClimate.
|
||||
- Continuous integration and deployment using GitLab.
|
||||
- Usage of the Community Home Assistant Add-ons build environment.
|
||||
- Small use of the Bash function library in our base images.
|
||||
- The use of Docker label schema.
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Click the Home Assistant My button below to open the add-on on your Home
|
||||
Assistant instance.
|
||||
|
||||
[![Open this add-on in your Home Assistant instance.][addon-badge]][addon]
|
||||
|
||||
1. Click the "Install" button to install the add-on.
|
||||
1. Start the "Example" add-on.
|
||||
1. Check the logs of the "Example" add-on to see it in action.
|
||||
|
||||
## Configuration
|
||||
|
||||
Eventought this add-on is just an example add-on, it does come with some
|
||||
configuration options to play around with.
|
||||
|
||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||
|
||||
Example add-on configuration:
|
||||
|
||||
```yaml
|
||||
log_level: info
|
||||
seconds_between_quotes: 5
|
||||
```
|
||||
|
||||
### Option: `log_level`
|
||||
|
||||
The `log_level` option controls the level of log output by the add-on and can
|
||||
be changed to be more or less verbose, which might be useful when you are
|
||||
dealing with an unknown issue. Possible values are:
|
||||
|
||||
- `trace`: Show every detail, like all called internal functions.
|
||||
- `debug`: Shows detailed debug information.
|
||||
- `info`: Normal (usually) interesting events.
|
||||
- `warning`: Exceptional occurrences that are not errors.
|
||||
- `error`: Runtime errors that do not require immediate action.
|
||||
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
|
||||
|
||||
Please note that each level automatically includes log messages from a
|
||||
more severe level, e.g., `debug` also shows `info` messages. By default,
|
||||
the `log_level` is set to `info`, which is the recommended setting unless
|
||||
you are troubleshooting.
|
||||
|
||||
### Option: `seconds_between_quotes`
|
||||
|
||||
Sets the number of seconds between the output of each quote. The value
|
||||
must be between `1` and `120` seconds. This value is set to `5` seconds by
|
||||
default.
|
||||
|
||||
## Changelog & Releases
|
||||
|
||||
This repository keeps a change log using [GitHub's releases][releases]
|
||||
functionality.
|
||||
|
||||
Releases are based on [Semantic Versioning][semver], and use the format
|
||||
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||
based on the following:
|
||||
|
||||
- `MAJOR`: Incompatible or major changes.
|
||||
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
||||
support and feature requests.
|
||||
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
||||
Assistant discussions and questions.
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||
|
||||
You could also [open an issue here][issue] GitHub.
|
||||
|
||||
## Authors & contributors
|
||||
|
||||
The original setup of this repository is by [Franck Nijhof][frenck].
|
||||
|
||||
For a full list of all authors and contributors,
|
||||
check [the contributor's page][contributors].
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017-2024 Franck Nijhof
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
[addon-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg
|
||||
[addon]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_example&repository_url=https%3A%2F%2Fgithub.com%2Fhassio-addons%2Frepository
|
||||
[contributors]: https://github.com/hassio-addons/addon-example/graphs/contributors
|
||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum]: https://community.home-assistant.io/t/repository-community-hass-io-add-ons/24705?u=frenck
|
||||
[frenck]: https://github.com/frenck
|
||||
[issue]: https://github.com/hassio-addons/addon-example/issues
|
||||
[reddit]: https://reddit.com/r/homeassistant
|
||||
[releases]: https://github.com/hassio-addons/addon-example/releases
|
||||
[semver]: http://semver.org/spec/v2.0.0.html
|
40
example/Dockerfile
Normal file
40
example/Dockerfile
Normal file
@ -0,0 +1,40 @@
|
||||
ARG BUILD_FROM=ghcr.io/hassio-addons/base:16.3.4
|
||||
# hadolint ignore=DL3006
|
||||
FROM ${BUILD_FROM}
|
||||
|
||||
# Copy root filesystem
|
||||
COPY rootfs /
|
||||
|
||||
# Setup base
|
||||
RUN apk add --no-cache \
|
||||
coreutils=9.5-r1 \
|
||||
wget=1.24.5-r0
|
||||
|
||||
# Build arguments
|
||||
ARG BUILD_ARCH
|
||||
ARG BUILD_DATE
|
||||
ARG BUILD_DESCRIPTION
|
||||
ARG BUILD_NAME
|
||||
ARG BUILD_REF
|
||||
ARG BUILD_REPOSITORY
|
||||
ARG BUILD_VERSION
|
||||
|
||||
# Labels
|
||||
LABEL \
|
||||
io.hass.name="${BUILD_NAME}" \
|
||||
io.hass.description="${BUILD_DESCRIPTION}" \
|
||||
io.hass.arch="${BUILD_ARCH}" \
|
||||
io.hass.type="addon" \
|
||||
io.hass.version=${BUILD_VERSION} \
|
||||
maintainer="Franck Nijhof <frenck@addons.community>" \
|
||||
org.opencontainers.image.title="${BUILD_NAME}" \
|
||||
org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
|
||||
org.opencontainers.image.vendor="Home Assistant Community Add-ons" \
|
||||
org.opencontainers.image.authors="Franck Nijhof <frenck@addons.community>" \
|
||||
org.opencontainers.image.licenses="MIT" \
|
||||
org.opencontainers.image.url="https://addons.community" \
|
||||
org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
|
||||
org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
|
||||
org.opencontainers.image.created=${BUILD_DATE} \
|
||||
org.opencontainers.image.revision=${BUILD_REF} \
|
||||
org.opencontainers.image.version=${BUILD_VERSION}
|
8
example/build.yaml
Normal file
8
example/build.yaml
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
build_from:
|
||||
aarch64: ghcr.io/hassio-addons/base:16.3.4
|
||||
amd64: ghcr.io/hassio-addons/base:16.3.4
|
||||
armv7: ghcr.io/hassio-addons/base:16.3.4
|
||||
codenotary:
|
||||
base_image: codenotary@frenck.dev
|
||||
signer: codenotary@frenck.dev
|
18
example/config.yaml
Normal file
18
example/config.yaml
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
name: Example
|
||||
version: dev
|
||||
slug: example
|
||||
description: Example add-on by Community Home Assistant Add-ons
|
||||
url: https://github.com/hassio-addons/addon-example
|
||||
codenotary: codenotary@frenck.dev
|
||||
init: false
|
||||
arch:
|
||||
- aarch64
|
||||
- amd64
|
||||
- armv7
|
||||
options:
|
||||
log_level: info
|
||||
seconds_between_quotes: 5
|
||||
schema:
|
||||
log_level: list(trace|debug|info|notice|warning|error|fatal)
|
||||
seconds_between_quotes: int(1,120)
|
BIN
example/icon.png
Normal file
BIN
example/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
BIN
example/logo.png
Normal file
BIN
example/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 130 KiB |
45
example/rootfs/etc/s6-overlay/s6-rc.d/example1/finish
Normal file
45
example/rootfs/etc/s6-overlay/s6-rc.d/example1/finish
Normal file
@ -0,0 +1,45 @@
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Example
|
||||
# ==============================================================================
|
||||
declare exit_code
|
||||
readonly exit_code_container=$(</run/s6-linux-init-container-results/exitcode)
|
||||
readonly exit_code_service="${1}"
|
||||
readonly exit_code_signal="${2}"
|
||||
readonly service="example1"
|
||||
|
||||
bashio::log.info \
|
||||
"Service ${service} exited with code ${exit_code_service}" \
|
||||
"(by signal ${exit_code_signal})"
|
||||
|
||||
# Received a signal
|
||||
if [[ "${exit_code_service}" -eq 256 ]]; then
|
||||
|
||||
# The signal might be a result of another service crashing. Only
|
||||
# overwrite the container exit code if it is not already set.
|
||||
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||
echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode
|
||||
fi
|
||||
|
||||
# If the signal is SIGTERM, we should halt the container and take down
|
||||
# the whole process tree.
|
||||
[[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt
|
||||
|
||||
# The service exited with a non-zero exit code, which means it crashed.
|
||||
elif [[ "${exit_code_service}" -ne 0 ]]; then
|
||||
|
||||
# The service might be a result of another service crashing. Only
|
||||
# overwrite the container exit code if it is not already set.
|
||||
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||
echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode
|
||||
fi
|
||||
|
||||
# We should halt the container and take down the whole process tree.
|
||||
exec /run/s6/basedir/bin/halt
|
||||
|
||||
# The service exited with a zero exit code, which means it exited, let
|
||||
# S6 supervision restart it.
|
||||
else
|
||||
bashio::log.info "Service ${service} restarting..."
|
||||
fi
|
10
example/rootfs/etc/s6-overlay/s6-rc.d/example1/run
Normal file
10
example/rootfs/etc/s6-overlay/s6-rc.d/example1/run
Normal file
@ -0,0 +1,10 @@
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Example
|
||||
# Runs example1 script
|
||||
# ==============================================================================
|
||||
|
||||
bashio::log.info "Starting Example1..."
|
||||
|
||||
exec /usr/bin/example1.sh
|
1
example/rootfs/etc/s6-overlay/s6-rc.d/example1/type
Normal file
1
example/rootfs/etc/s6-overlay/s6-rc.d/example1/type
Normal file
@ -0,0 +1 @@
|
||||
longrun
|
45
example/rootfs/etc/s6-overlay/s6-rc.d/example2/finish
Normal file
45
example/rootfs/etc/s6-overlay/s6-rc.d/example2/finish
Normal file
@ -0,0 +1,45 @@
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Example
|
||||
# ==============================================================================
|
||||
declare exit_code
|
||||
readonly exit_code_container=$(</run/s6-linux-init-container-results/exitcode)
|
||||
readonly exit_code_service="${1}"
|
||||
readonly exit_code_signal="${2}"
|
||||
readonly service="example2"
|
||||
|
||||
bashio::log.info \
|
||||
"Service ${service} exited with code ${exit_code_service}" \
|
||||
"(by signal ${exit_code_signal})"
|
||||
|
||||
# Received a signal
|
||||
if [[ "${exit_code_service}" -eq 256 ]]; then
|
||||
|
||||
# The signal might be a result of another service crashing. Only
|
||||
# overwrite the container exit code if it is not already set.
|
||||
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||
echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode
|
||||
fi
|
||||
|
||||
# If the signal is SIGTERM, we should halt the container and take down
|
||||
# the whole process tree.
|
||||
[[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt
|
||||
|
||||
# The service exited with a non-zero exit code, which means it crashed.
|
||||
elif [[ "${exit_code_service}" -ne 0 ]]; then
|
||||
|
||||
# The service might be a result of another service crashing. Only
|
||||
# overwrite the container exit code if it is not already set.
|
||||
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||
echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode
|
||||
fi
|
||||
|
||||
# We should halt the container and take down the whole process tree.
|
||||
exec /run/s6/basedir/bin/halt
|
||||
|
||||
# The service exited with a zero exit code, which means it exited, let
|
||||
# S6 supervision restart it.
|
||||
else
|
||||
bashio::log.info "Service ${service} restarting..."
|
||||
fi
|
10
example/rootfs/etc/s6-overlay/s6-rc.d/example2/run
Normal file
10
example/rootfs/etc/s6-overlay/s6-rc.d/example2/run
Normal file
@ -0,0 +1,10 @@
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Example
|
||||
# Runs example2 script
|
||||
# ==============================================================================
|
||||
|
||||
bashio::log.info "Starting Example2..."
|
||||
|
||||
exec /usr/bin/example2.sh
|
1
example/rootfs/etc/s6-overlay/s6-rc.d/example2/type
Normal file
1
example/rootfs/etc/s6-overlay/s6-rc.d/example2/type
Normal file
@ -0,0 +1 @@
|
||||
longrun
|
8
example/rootfs/etc/s6-overlay/s6-rc.d/init-example/run
Normal file
8
example/rootfs/etc/s6-overlay/s6-rc.d/init-example/run
Normal file
@ -0,0 +1,8 @@
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Example
|
||||
# Example init script, runs before any other service
|
||||
# ==============================================================================
|
||||
|
||||
bashio::log.info "Oh, hi! I'm the init script!"
|
1
example/rootfs/etc/s6-overlay/s6-rc.d/init-example/type
Normal file
1
example/rootfs/etc/s6-overlay/s6-rc.d/init-example/type
Normal file
@ -0,0 +1 @@
|
||||
oneshot
|
1
example/rootfs/etc/s6-overlay/s6-rc.d/init-example/up
Normal file
1
example/rootfs/etc/s6-overlay/s6-rc.d/init-example/up
Normal file
@ -0,0 +1 @@
|
||||
/etc/s6-overlay/s6-rc.d/init-example/run
|
116
example/rootfs/usr/bin/example1.sh
Normal file
116
example/rootfs/usr/bin/example1.sh
Normal file
@ -0,0 +1,116 @@
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Example
|
||||
#
|
||||
# Example add-on for Home Assistant.
|
||||
# This add-on displays a random quote every X seconds.
|
||||
# ==============================================================================
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Get a random quote from quotationspage.com
|
||||
#
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# String with the quote
|
||||
# ------------------------------------------------------------------------------
|
||||
get_quote_online() {
|
||||
local number
|
||||
local html
|
||||
local quote
|
||||
|
||||
bashio::log.trace "${FUNCNAME[0]}"
|
||||
|
||||
number=$(( ( RANDOM % 999 ) + 1 ))
|
||||
html=$(wget -q -O - "http://www.quotationspage.com/quote/${number}.html")
|
||||
|
||||
quote=$(grep -e "<dt>" -e "</dd>" <<< "${html}" \
|
||||
| awk -F'[<>]' '{
|
||||
if($2 ~ /dt/)
|
||||
{ print $3 }
|
||||
else if($4 ~ /b/)
|
||||
{ print "-- " $7 " n(" $19 ")"}
|
||||
}'
|
||||
)
|
||||
|
||||
echo "${quote}"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Get a random quote from a prefined set of quotes
|
||||
#
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# String with the quote
|
||||
# ------------------------------------------------------------------------------
|
||||
get_quote_offline() {
|
||||
local -i number
|
||||
local -a quotes
|
||||
|
||||
bashio::log.trace "${FUNCNAME[0]}"
|
||||
|
||||
quotes+=("Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.\\n -Samuel Beckett")
|
||||
quotes+=("Never give up, for that is just the place and time that the tide will turn.\\n -Harriet Beecher Stowe")
|
||||
quotes+=("Our greatest weakness lies in giving up. The most certain way to succeed is always to try just one more time.\\n -Thomas A. Edison")
|
||||
quotes+=("Life isn't about getting and having, it's about giving and being.\\n -Kevin Kruse")
|
||||
quotes+=("Strive not to be a success, but rather to be of value.\\n -Albert Einstein")
|
||||
quotes+=("You miss 100% of the shots you don't take.\\n -Wayne Gretzky")
|
||||
quotes+=("People who are unable to motivate themselves must be content with mediocrity, no matter how impressive their other talents. \\n -Andrew Carnegie")
|
||||
quotes+=("Design is not just what it looks like and feels like. Design is how it works.\\n -Steve Jobs")
|
||||
quotes+=("Only those who dare to fail greatly can ever achieve greatly.\\n -Robert F. Kennedy")
|
||||
quotes+=("All our dreams can come true, if we have the courage to pursue them.\\n -Walt Disney")
|
||||
quotes+=("Success consists of going from failure to failure without loss of enthusiasm.\\n -Winston Churchill")
|
||||
|
||||
number=$(( ( RANDOM % 11 ) + 1 ))
|
||||
echo "${quotes[$number]}"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Displays a random quote
|
||||
#
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# String with the quote
|
||||
# -----------------------------------------------------------------------------
|
||||
display_quote() {
|
||||
local quote
|
||||
local timestamp
|
||||
|
||||
bashio::log.trace "${FUNCNAME[0]}"
|
||||
|
||||
if wget -q --spider http://www.quotationspage.com; then
|
||||
quote=$(get_quote_online)
|
||||
else
|
||||
bashio::log.notice \
|
||||
'Could not connect to quotationspage.com, using an offline quote'
|
||||
quote=$(get_quote_offline)
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2001
|
||||
quote=$(sed 's/n()//g' <<< "${quote}" | xargs -0 echo | fmt -40)
|
||||
timestamp=$(date +"%T")
|
||||
|
||||
bashio::log.info "Random quote loaded @ ${timestamp}"
|
||||
echo -e "${quote}"
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# RUN LOGIC
|
||||
# ------------------------------------------------------------------------------
|
||||
main() {
|
||||
local sleep
|
||||
|
||||
bashio::log.trace "${FUNCNAME[0]}"
|
||||
|
||||
sleep=$(bashio::config 'seconds_between_quotes')
|
||||
bashio::log.info "Seconds between each quotes is set to: ${sleep}"
|
||||
|
||||
while true; do
|
||||
display_quote
|
||||
sleep "${sleep}"
|
||||
done
|
||||
}
|
||||
main "$@"
|
16
example/rootfs/usr/bin/example2.sh
Normal file
16
example/rootfs/usr/bin/example2.sh
Normal file
@ -0,0 +1,16 @@
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Example
|
||||
#
|
||||
# Example add-on for Home Assistant.
|
||||
# ------------------------------------------------------------------------------
|
||||
main() {
|
||||
bashio::log.trace "${FUNCNAME[0]}"
|
||||
|
||||
while true; do
|
||||
echo "Second Script Output"
|
||||
sleep 10
|
||||
done
|
||||
}
|
||||
main "$@"
|
10
example/translations/en.yaml
Normal file
10
example/translations/en.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
configuration:
|
||||
log_level:
|
||||
name: Log level
|
||||
description: The amount of logging the add-on should do.
|
||||
seconds_between_quotes:
|
||||
name: Seconds between quotes
|
||||
description: >-
|
||||
The number of seconds the add-on waits until showing a new quote in the
|
||||
add-on log.
|
80
gitea_act_runner/.README.j2
Normal file
80
gitea_act_runner/.README.j2
Normal file
@ -0,0 +1,80 @@
|
||||
# Home Assistant Community Add-on: Example
|
||||
|
||||
[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
|
||||
|
||||
[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
|
||||
|
||||
[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
|
||||
|
||||
[![Support Frenck on Patreon][patreon-shield]][patreon]
|
||||
|
||||
Example add-on by Community Home Assistant add-ons.
|
||||
|
||||
## About
|
||||
|
||||
This is an example add-on for Home Assistant. When started, it displays a
|
||||
random quote every 5 seconds.
|
||||
|
||||
It shows off several features and structures like:
|
||||
|
||||
- Full blown GitHub repository.
|
||||
- General Dockerfile structure and setup.
|
||||
- The use of the `config.yaml` and `build.yaml` files.
|
||||
- General shell scripting structure (`run.sh`).
|
||||
- Quality assurance using CodeClimate.
|
||||
- Continuous integration and deployment using GitLab.
|
||||
- Usage of the Community Home Assistant Add-ons build environment.
|
||||
- Small use of the Bash function library in our base images.
|
||||
- The use of Docker label schema.
|
||||
|
||||
{% if channel == "edge" %}
|
||||
## WARNING! THIS IS AN EDGE VERSION!
|
||||
|
||||
This Home Assistant Add-ons repository contains edge builds of add-ons.
|
||||
Edge builds add-ons are based upon the latest development version.
|
||||
|
||||
- They may not work at all.
|
||||
- They might stop working at any time.
|
||||
- They could have a negative impact on your system.
|
||||
|
||||
This repository was created for:
|
||||
|
||||
- Anybody willing to test.
|
||||
- Anybody interested in trying out upcoming add-ons or add-on features.
|
||||
- Developers.
|
||||
|
||||
If you are more interested in stable releases of our add-ons:
|
||||
|
||||
<https://github.com/hassio-addons/repository>
|
||||
|
||||
{% endif %}
|
||||
{% if channel == "beta" %}
|
||||
## WARNING! THIS IS A BETA VERSION!
|
||||
|
||||
This Home Assistant Add-ons repository contains beta releases of add-ons.
|
||||
|
||||
- They might stop working at any time.
|
||||
- They could have a negative impact on your system.
|
||||
|
||||
This repository was created for:
|
||||
|
||||
- Anybody willing to test.
|
||||
- Anybody interested in trying out upcoming add-ons or add-on features.
|
||||
|
||||
If you are more interested in stable releases of our add-ons:
|
||||
|
||||
<https://github.com/hassio-addons/repository>
|
||||
|
||||
{% endif %}
|
||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||
[forum]: https://community.home-assistant.io?u=frenck
|
||||
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
|
||||
[github-sponsors]: https://github.com/sponsors/frenck
|
||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2024.svg
|
||||
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
|
||||
[patreon]: https://www.patreon.com/frenck
|
||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
|
||||
[release-shield]: https://img.shields.io/badge/version-{{ version }}-blue.svg
|
||||
[release]: {{ repo }}/tree/{{ version }}
|
139
gitea_act_runner/DOCS.md
Normal file
139
gitea_act_runner/DOCS.md
Normal file
@ -0,0 +1,139 @@
|
||||
# Home Assistant Community Add-on: Example
|
||||
|
||||
This is an example add-on for Home Assistant. When started, it displays a
|
||||
random quote every 5 seconds.
|
||||
|
||||
It shows off several features and structures like:
|
||||
|
||||
- Full blown GitHub repository.
|
||||
- General Dockerfile structure and setup.
|
||||
- The use of the `config.yaml` and `build.yaml` files.
|
||||
- General shell scripting structure (`run.sh`).
|
||||
- Quality assurance using CodeClimate.
|
||||
- Continuous integration and deployment using GitLab.
|
||||
- Usage of the Community Home Assistant Add-ons build environment.
|
||||
- Small use of the Bash function library in our base images.
|
||||
- The use of Docker label schema.
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Click the Home Assistant My button below to open the add-on on your Home
|
||||
Assistant instance.
|
||||
|
||||
[![Open this add-on in your Home Assistant instance.][addon-badge]][addon]
|
||||
|
||||
1. Click the "Install" button to install the add-on.
|
||||
1. Start the "Example" add-on.
|
||||
1. Check the logs of the "Example" add-on to see it in action.
|
||||
|
||||
## Configuration
|
||||
|
||||
Eventought this add-on is just an example add-on, it does come with some
|
||||
configuration options to play around with.
|
||||
|
||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||
|
||||
Example add-on configuration:
|
||||
|
||||
```yaml
|
||||
log_level: info
|
||||
seconds_between_quotes: 5
|
||||
```
|
||||
|
||||
### Option: `log_level`
|
||||
|
||||
The `log_level` option controls the level of log output by the add-on and can
|
||||
be changed to be more or less verbose, which might be useful when you are
|
||||
dealing with an unknown issue. Possible values are:
|
||||
|
||||
- `trace`: Show every detail, like all called internal functions.
|
||||
- `debug`: Shows detailed debug information.
|
||||
- `info`: Normal (usually) interesting events.
|
||||
- `warning`: Exceptional occurrences that are not errors.
|
||||
- `error`: Runtime errors that do not require immediate action.
|
||||
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
|
||||
|
||||
Please note that each level automatically includes log messages from a
|
||||
more severe level, e.g., `debug` also shows `info` messages. By default,
|
||||
the `log_level` is set to `info`, which is the recommended setting unless
|
||||
you are troubleshooting.
|
||||
|
||||
### Option: `seconds_between_quotes`
|
||||
|
||||
Sets the number of seconds between the output of each quote. The value
|
||||
must be between `1` and `120` seconds. This value is set to `5` seconds by
|
||||
default.
|
||||
|
||||
## Changelog & Releases
|
||||
|
||||
This repository keeps a change log using [GitHub's releases][releases]
|
||||
functionality.
|
||||
|
||||
Releases are based on [Semantic Versioning][semver], and use the format
|
||||
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||
based on the following:
|
||||
|
||||
- `MAJOR`: Incompatible or major changes.
|
||||
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
||||
support and feature requests.
|
||||
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
||||
Assistant discussions and questions.
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||
|
||||
You could also [open an issue here][issue] GitHub.
|
||||
|
||||
## Authors & contributors
|
||||
|
||||
The original setup of this repository is by [Franck Nijhof][frenck].
|
||||
|
||||
For a full list of all authors and contributors,
|
||||
check [the contributor's page][contributors].
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017-2024 Franck Nijhof
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
[addon-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg
|
||||
[addon]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_example&repository_url=https%3A%2F%2Fgithub.com%2Fhassio-addons%2Frepository
|
||||
[contributors]: https://github.com/hassio-addons/addon-example/graphs/contributors
|
||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||
[discord]: https://discord.me/hassioaddons
|
||||
[forum]: https://community.home-assistant.io/t/repository-community-hass-io-add-ons/24705?u=frenck
|
||||
[frenck]: https://github.com/frenck
|
||||
[issue]: https://github.com/hassio-addons/addon-example/issues
|
||||
[reddit]: https://reddit.com/r/homeassistant
|
||||
[releases]: https://github.com/hassio-addons/addon-example/releases
|
||||
[semver]: http://semver.org/spec/v2.0.0.html
|
@ -1,11 +1,11 @@
|
||||
ARG BUILD_FROM
|
||||
FROM $BUILD_FROM
|
||||
ARG BUILD_FROM=ghcr.io/hassio-addons/base:16.3.4
|
||||
# hadolint ignore=DL3006
|
||||
FROM ${BUILD_FROM}
|
||||
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
# Setup base system
|
||||
ARG \
|
||||
BUILD_ARCH
|
||||
# Copy root filesystem
|
||||
COPY rootfs /
|
||||
|
||||
# Install necessary dependencies
|
||||
RUN apk add --no-cache git docker-cli python3 py3-pip && \
|
||||
@ -15,11 +15,15 @@ RUN adduser -s /bin/false -D -H actrunner
|
||||
RUN python3 -m venv /opt/ansible-venv && \
|
||||
/opt/ansible-venv/bin/pip install --no-cache-dir ansible
|
||||
|
||||
# Optional: Additional steps for SSH/GitHub authentication or configuration
|
||||
|
||||
# Copy your add-on scripts and configuration files
|
||||
COPY rootfs /
|
||||
RUN chmod +x /etc/services.d/actrunner/*
|
||||
# Build arguments
|
||||
ARG BUILD_ARCH
|
||||
ARG BUILD_DATE
|
||||
ARG BUILD_DESCRIPTION
|
||||
ARG BUILD_NAME
|
||||
ARG BUILD_REF
|
||||
ARG BUILD_REPOSITORY
|
||||
ARG BUILD_VERSION
|
||||
|
||||
# Labels
|
||||
LABEL \
|
||||
@ -36,3 +40,4 @@ LABEL \
|
||||
org.opencontainers.image.licenses="NO" \
|
||||
org.opencontainers.image.url="https://mezgit.duckdns.org/mezned/HAddons" \
|
||||
org.opencontainers.image.source="https://mezgit.duckdns.org/mezned/HAddons/gitea_act_runner"
|
||||
|
||||
|
8
gitea_act_runner/build.yaml
Normal file
8
gitea_act_runner/build.yaml
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
build_from:
|
||||
aarch64: ghcr.io/hassio-addons/base:16.3.4
|
||||
amd64: ghcr.io/hassio-addons/base:16.3.4
|
||||
armv7: ghcr.io/hassio-addons/base:16.3.4
|
||||
codenotary:
|
||||
base_image: codenotary@feres.dev
|
||||
signer: codenotary@feres.dev
|
@ -1,15 +1,15 @@
|
||||
---
|
||||
name: "Act Runner and Ansible Add-on"
|
||||
version: "1.0.0"
|
||||
slug: "act_runner_ansible"
|
||||
description: "Home Assistant add-on that runs Act runner with Gitea integration."
|
||||
url: https://mezgit.duckdns.org/mezned/HAddons/gitea_act_runner
|
||||
codenotary: codenotary@feres.dev
|
||||
init: false
|
||||
arch:
|
||||
- aarch64
|
||||
- amd64
|
||||
- armhf
|
||||
- armv7
|
||||
- i386
|
||||
startup: "application"
|
||||
boot: "auto"
|
||||
options:
|
||||
gitea_url: "https://your-gitea-instance.com"
|
||||
gitea_token: "your_token"
|
||||
|
BIN
gitea_act_runner/icon.png
Normal file
BIN
gitea_act_runner/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.9 KiB |
BIN
gitea_act_runner/logo.png
Normal file
BIN
gitea_act_runner/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.9 KiB |
@ -0,0 +1,45 @@
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: Example
|
||||
# ==============================================================================
|
||||
declare exit_code
|
||||
readonly exit_code_container=$(</run/s6-linux-init-container-results/exitcode)
|
||||
readonly exit_code_service="${1}"
|
||||
readonly exit_code_signal="${2}"
|
||||
readonly service="actrunner"
|
||||
|
||||
bashio::log.info \
|
||||
"Service ${service} exited with code ${exit_code_service}" \
|
||||
"(by signal ${exit_code_signal})"
|
||||
|
||||
# Received a signal
|
||||
if [[ "${exit_code_service}" -eq 256 ]]; then
|
||||
|
||||
# The signal might be a result of another service crashing. Only
|
||||
# overwrite the container exit code if it is not already set.
|
||||
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||
echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode
|
||||
fi
|
||||
|
||||
# If the signal is SIGTERM, we should halt the container and take down
|
||||
# the whole process tree.
|
||||
[[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt
|
||||
|
||||
# The service exited with a non-zero exit code, which means it crashed.
|
||||
elif [[ "${exit_code_service}" -ne 0 ]]; then
|
||||
|
||||
# The service might be a result of another service crashing. Only
|
||||
# overwrite the container exit code if it is not already set.
|
||||
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||
echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode
|
||||
fi
|
||||
|
||||
# We should halt the container and take down the whole process tree.
|
||||
exec /run/s6/basedir/bin/halt
|
||||
|
||||
# The service exited with a zero exit code, which means it exited, let
|
||||
# S6 supervision restart it.
|
||||
else
|
||||
bashio::log.info "Service ${service} restarting..."
|
||||
fi
|
@ -1,10 +1,10 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
#!/command/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
# ==============================================================================
|
||||
# Home Assistant Add-on: actrunner
|
||||
# Runs actrunner
|
||||
# Home Assistant Community Add-on: actrunner
|
||||
# Runs actrunner script
|
||||
# ==============================================================================
|
||||
readonly PROMTAIL_CONFIG='/etc/promtail/config.yaml'
|
||||
|
||||
declare log_level
|
||||
|
||||
bashio::log.info 'Starting actrunner...'
|
||||
@ -47,4 +47,4 @@ curl -X POST "$GITEA_URL/api/v1/repos/$REPOSITORY/actions/runners" \
|
||||
-d '{ "name": "Act Runner", "labels": ["self-hosted"] }'
|
||||
|
||||
bashio::log.info "Handing over control to actrunner..."
|
||||
exec s6-setuidgid actrunner act $ACT_OPTIONS
|
||||
exec /usr/local/bin/act $ACT_OPTIONS
|
@ -1,15 +0,0 @@
|
||||
#!/usr/bin/env bashio
|
||||
# ==============================================================================
|
||||
# Take down the S6 supervision tree when actrunner fails
|
||||
# s6-overlay docs: https://github.com/just-containers/s6-overlay
|
||||
# ==============================================================================
|
||||
|
||||
declare APP_EXIT_CODE=${1}
|
||||
|
||||
if [[ "${APP_EXIT_CODE}" -ne 0 ]] && [[ "${APP_EXIT_CODE}" -ne 256 ]]; then
|
||||
bashio::log.warning "Halt add-on with exit code ${APP_EXIT_CODE}"
|
||||
echo "${APP_EXIT_CODE}" > /run/s6-linux-init-container-results/exitcode
|
||||
exec /run/s6/basedir/bin/halt
|
||||
fi
|
||||
|
||||
bashio::log.info "Service restart after closing"
|
Loading…
x
Reference in New Issue
Block a user