Compare commits
88 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 49cea26e86 | |||
| 011abf2aa5 | |||
| 2fdd760070 | |||
| a638507b2b | |||
| ad2e249a87 | |||
| 712841f292 | |||
| 5514b1bb3d | |||
| 9d9f43814d | |||
| 78ece5ef00 | |||
| 4bbb4ec7fd | |||
| 4482cc29a3 | |||
| 4647ec71d8 | |||
| 11fab3ffba | |||
| 1e1ee65a0b | |||
| 427fb99318 | |||
| 2cc545165a | |||
| 34b141973a | |||
| 770fab2e33 | |||
| e230b14b90 | |||
| 76e797a304 | |||
| 65bff1e102 | |||
| 561f977773 | |||
| aab386938a | |||
| 2f9c450c12 | |||
| 1b22d951c6 | |||
| 3a83f7d074 | |||
| 4480cef07d | |||
| bae0276dcc | |||
| e24900faff | |||
| fe0d98c0c4 | |||
| b49e196d21 | |||
| 6bc51936c2 | |||
| cbe33305ea | |||
| 7852a41fa2 | |||
| f31807f229 | |||
| 35bb849461 | |||
| 18fad375cf | |||
| b685fe81ef | |||
| 17b7944401 | |||
| 283f56101a | |||
| 25997803ed | |||
| 0359de9311 | |||
| 5cec577c38 | |||
| 4cf0838ca2 | |||
| db2adc5b48 | |||
| f67466b85c | |||
| 02213d575a | |||
| 3593c2375f | |||
| 64a8ef45fa | |||
| 40ab6e1ec2 | |||
| d9a95e512f | |||
| 6c0b81ff4e | |||
| c8e54c49ed | |||
| 8940d5f907 | |||
| 28fce7e021 | |||
| 855210ce59 | |||
| 726660d912 | |||
| 0a9eea8a02 | |||
| ad15387af1 | |||
| c6a8144a2c | |||
| 2a78c33704 | |||
| 137d42d9e2 | |||
| 9b67bf3a4f | |||
| 43e0df26b6 | |||
| de368ae5b3 | |||
| a86e6beed3 | |||
| 9cfeae936b | |||
| 1a70f72659 | |||
| 8385c01e5b | |||
| 8d71c88660 | |||
| 29b77372d6 | |||
| 222d7d8492 | |||
| c6fa44a682 | |||
| 99cc3bef48 | |||
| 7cff9c54f1 | |||
| a07a79deb8 | |||
| cdb84b28ce | |||
| 9f554c7359 | |||
| ca396a2cda | |||
| 0cef0e84da | |||
| 18b8e3a3eb | |||
| 0746681000 | |||
| 1afe905387 | |||
| 8a0d2dbfdc | |||
| 1759409468 | |||
| 7a31451c90 | |||
| 3b5abde681 | |||
| e9adc7135d |
@@ -0,0 +1 @@
|
|||||||
|
.github/* @GauthamVarmaK
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity
|
||||||
|
and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
- Demonstrating empathy and kindness toward other people
|
||||||
|
- Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
- Giving and gracefully accepting constructive feedback
|
||||||
|
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
- Focusing on what is best not just for us as individuals, but for the
|
||||||
|
overall community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
- The use of sexualized language or imagery, and sexual attention or
|
||||||
|
advances of any kind
|
||||||
|
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
- Public or private harassment
|
||||||
|
- Publishing others' private information, such as a physical or email
|
||||||
|
address, without their explicit permission
|
||||||
|
- Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official e-mail address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement.
|
||||||
|
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series
|
||||||
|
of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or
|
||||||
|
permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
the community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.0, available at
|
||||||
|
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder][mozilla coc].
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
[https://www.contributor-covenant.org/faq][faq]. Translations are available
|
||||||
|
at [https://www.contributor-covenant.org/translations][translations].
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||||
|
[mozilla coc]: https://github.com/mozilla/diversity
|
||||||
|
[faq]: https://www.contributor-covenant.org/faq
|
||||||
|
[translations]: https://www.contributor-covenant.org/translations
|
||||||
@@ -4,8 +4,8 @@ When contributing to this repository, please first discuss the change you wish
|
|||||||
to make via issue, email, or any other method with the owners of this repository
|
to make via issue, email, or any other method with the owners of this repository
|
||||||
before making a change.
|
before making a change.
|
||||||
|
|
||||||
Please note we have a code of conduct, please follow it in all your interactions
|
Please note we have a [code of conduct](CODE_OF_CONDUCT.md), please follow
|
||||||
with the project.
|
it in all your interactions with the project.
|
||||||
|
|
||||||
## Issues and feature requests
|
## Issues and feature requests
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Problem/Motivation
|
||||||
|
|
||||||
|
> (Why the issue was filed)
|
||||||
|
|
||||||
|
## Expected behavior
|
||||||
|
|
||||||
|
> (What you expected to happen)
|
||||||
|
|
||||||
|
## Actual behavior
|
||||||
|
|
||||||
|
> (What actually happened)
|
||||||
|
|
||||||
|
## Steps to reproduce
|
||||||
|
|
||||||
|
> (How can someone else make/see it happen)
|
||||||
|
|
||||||
|
## Proposed changes
|
||||||
|
|
||||||
|
> (If you have a proposed change, workaround or fix,
|
||||||
|
> describe the rationale behind it)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Proposed Changes
|
||||||
|
|
||||||
|
> (Describe the changes and rationale behind them)
|
||||||
|
|
||||||
|
## Related Issues
|
||||||
|
|
||||||
|
> ([Github link][autolink-references] to related issues or pull requests)
|
||||||
|
|
||||||
|
[autolink-references]: https://help.github.com/articles/autolinked-references-and-urls/
|
||||||
@@ -6,3 +6,8 @@ updates:
|
|||||||
schedule:
|
schedule:
|
||||||
interval: daily
|
interval: daily
|
||||||
time: "06:00"
|
time: "06:00"
|
||||||
|
- package-ecosystem: "pip"
|
||||||
|
directory: "/tvheadend/"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
time: "06:00"
|
||||||
|
|||||||
@@ -1,85 +0,0 @@
|
|||||||
---
|
|
||||||
- name: "breaking-change"
|
|
||||||
color: ee0701
|
|
||||||
description: "A breaking change for existing users."
|
|
||||||
- name: "bugfix"
|
|
||||||
color: ee0701
|
|
||||||
description: "Inconsistencies or issues which will cause a problem for users or implementors."
|
|
||||||
- name: "documentation"
|
|
||||||
color: 0052cc
|
|
||||||
description: "Solely about the documentation of the project."
|
|
||||||
- name: "enhancement"
|
|
||||||
color: 1d76db
|
|
||||||
description: "Enhancement of the code, not introducing new features."
|
|
||||||
- name: "refactor"
|
|
||||||
color: 1d76db
|
|
||||||
description: "Improvement of existing code, not introducing new features."
|
|
||||||
- name: "performance"
|
|
||||||
color: 1d76db
|
|
||||||
description: "Improving performance, not introducing new features."
|
|
||||||
- name: "new-feature"
|
|
||||||
color: 0e8a16
|
|
||||||
description: "New features or options."
|
|
||||||
- name: "maintenance"
|
|
||||||
color: 2af79e
|
|
||||||
description: "Generic maintenance tasks."
|
|
||||||
- name: "ci"
|
|
||||||
color: 1d76db
|
|
||||||
description: "Work that improves the continue integration."
|
|
||||||
- name: "dependencies"
|
|
||||||
color: 1d76db
|
|
||||||
description: "Upgrade or downgrade of project dependencies."
|
|
||||||
|
|
||||||
- name: "in-progress"
|
|
||||||
color: fbca04
|
|
||||||
description: "Issue is currently being resolved by a developer."
|
|
||||||
- name: "stale"
|
|
||||||
color: fef2c0
|
|
||||||
description: "There has not been activity on this issue or PR for quite some time."
|
|
||||||
- name: "no-stale"
|
|
||||||
color: fef2c0
|
|
||||||
description: "This issue or PR is exempted from the stable bot."
|
|
||||||
|
|
||||||
- name: "security"
|
|
||||||
color: ee0701
|
|
||||||
description: "Marks a security issue that needs to be resolved asap."
|
|
||||||
- name: "incomplete"
|
|
||||||
color: fef2c0
|
|
||||||
description: "Marks a PR or issue that is missing information."
|
|
||||||
- name: "invalid"
|
|
||||||
color: fef2c0
|
|
||||||
description: "Marks a PR or issue that is missing information."
|
|
||||||
|
|
||||||
- name: "beginner-friendly"
|
|
||||||
color: 0e8a16
|
|
||||||
description: "Good first issue for people wanting to contribute to the project."
|
|
||||||
- name: "help-wanted"
|
|
||||||
color: 0e8a16
|
|
||||||
description: "We need some extra helping hands or expertise in order to resolve this."
|
|
||||||
|
|
||||||
- name: "hacktoberfest"
|
|
||||||
description: "Issues/PRs are participating in the Hacktoberfest."
|
|
||||||
color: fbca04
|
|
||||||
- name: "hacktoberfest-accepted"
|
|
||||||
description: "Issues/PRs are participating in the Hacktoberfest."
|
|
||||||
color: fbca04
|
|
||||||
|
|
||||||
- name: "priority-critical"
|
|
||||||
color: ee0701
|
|
||||||
description: "This should be dealt with ASAP. Not fixing this issue would be a serious error."
|
|
||||||
- name: "priority-high"
|
|
||||||
color: b60205
|
|
||||||
description: "After critical issues are fixed, these should be dealt with before any further issues."
|
|
||||||
- name: "priority-medium"
|
|
||||||
color: 0e8a16
|
|
||||||
description: "This issue may be useful, and needs some attention."
|
|
||||||
- name: "priority-low"
|
|
||||||
color: e4ea8a
|
|
||||||
description: "Nice addition, maybe... someday..."
|
|
||||||
|
|
||||||
- name: "major"
|
|
||||||
color: b60205
|
|
||||||
description: "This PR causes a major version bump in the version number."
|
|
||||||
- name: "minor"
|
|
||||||
color: 0e8a16
|
|
||||||
description: "This PR causes a minor version bump in the version number."
|
|
||||||
+2
-191
@@ -12,194 +12,5 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
information:
|
workflows:
|
||||||
name: Gather add-on information
|
uses: hassio-addons/workflows/.github/workflows/addon-ci.yaml@main
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
architectures: ${{ steps.information.outputs.architectures }}
|
|
||||||
build: ${{ steps.information.outputs.build }}
|
|
||||||
description: ${{ steps.information.outputs.description }}
|
|
||||||
name: ${{ steps.information.outputs.name }}
|
|
||||||
slug: ${{ steps.information.outputs.slug }}
|
|
||||||
target: ${{ steps.information.outputs.target }}
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🚀 Run add-on information action
|
|
||||||
id: information
|
|
||||||
uses: frenck/action-addon-information@v1.2
|
|
||||||
|
|
||||||
lint-addon:
|
|
||||||
name: Lint Add-on
|
|
||||||
needs:
|
|
||||||
- information
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🚀 Run Add-on Lint
|
|
||||||
uses: frenck/action-addon-linter@v2.2
|
|
||||||
with:
|
|
||||||
community: true
|
|
||||||
path: "./${{ needs.information.outputs.target }}"
|
|
||||||
|
|
||||||
lint-hadolint:
|
|
||||||
name: Hadolint
|
|
||||||
needs:
|
|
||||||
- information
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🚀 Run Hadolint
|
|
||||||
uses: brpaz/hadolint-action@v1.5.0
|
|
||||||
with:
|
|
||||||
dockerfile: "./${{ needs.information.outputs.target }}/Dockerfile"
|
|
||||||
|
|
||||||
lint-json:
|
|
||||||
name: JSON Lint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🚀 Run JQ
|
|
||||||
run: |
|
|
||||||
shopt -s globstar
|
|
||||||
cat **/*.json | jq '.'
|
|
||||||
|
|
||||||
lint-markdown:
|
|
||||||
name: MarkdownLint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🚀 Run mdl
|
|
||||||
uses: actionshub/markdownlint@2.0.2
|
|
||||||
|
|
||||||
lint-shellcheck:
|
|
||||||
name: Shellcheck
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🚀 Run Shellcheck
|
|
||||||
uses: ludeeus/action-shellcheck@1.1.0
|
|
||||||
env:
|
|
||||||
SHELLCHECK_OPTS: -s bash
|
|
||||||
|
|
||||||
lint-yamllint:
|
|
||||||
name: YAMLLint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🚀 Run YAMLLint
|
|
||||||
uses: frenck/action-yamllint@v1.1
|
|
||||||
|
|
||||||
lint-prettier:
|
|
||||||
name: Prettier
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🚀 Run Prettier
|
|
||||||
uses: creyD/prettier_action@v3.3
|
|
||||||
with:
|
|
||||||
prettier_options: --write **/*.{json,js,md,yaml}
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
build:
|
|
||||||
name: Build ${{ matrix.architecture }}
|
|
||||||
needs:
|
|
||||||
- information
|
|
||||||
- lint-addon
|
|
||||||
- lint-hadolint
|
|
||||||
- lint-json
|
|
||||||
- lint-markdown
|
|
||||||
- lint-prettier
|
|
||||||
- lint-shellcheck
|
|
||||||
- lint-yamllint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
architecture: ${{ fromJson(needs.information.outputs.architectures) }}
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🏗 Set up build cache
|
|
||||||
id: cache
|
|
||||||
uses: actions/cache@v2.1.6
|
|
||||||
with:
|
|
||||||
path: /tmp/.docker-cache
|
|
||||||
key: docker-${{ matrix.architecture }}-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
docker-${{ matrix.architecture }}
|
|
||||||
- name: 🏗 Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v1.2.0
|
|
||||||
- name: 🏗 Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v1.5.1
|
|
||||||
- name: 🏗 Set up CodeNotary
|
|
||||||
run: bash <(curl https://getvcn.codenotary.com -L)
|
|
||||||
- name: ℹ️ Compose build flags
|
|
||||||
id: flags
|
|
||||||
run: |
|
|
||||||
echo "::set-output name=date::$(date +"%Y-%m-%dT%H:%M:%SZ")"
|
|
||||||
from=$(jq --raw-output ".build_from.${{ matrix.architecture }}" "${{ needs.information.outputs.build }}")
|
|
||||||
echo "::set-output name=from::${from}"
|
|
||||||
|
|
||||||
if [[ "${{ matrix.architecture}}" = "amd64" ]]; then
|
|
||||||
echo "::set-output name=platform::linux/amd64"
|
|
||||||
elif [[ "${{ matrix.architecture }}" = "i386" ]]; then
|
|
||||||
echo "::set-output name=platform::linux/386"
|
|
||||||
elif [[ "${{ matrix.architecture }}" = "armhf" ]]; then
|
|
||||||
echo "::set-output name=platform::linux/arm/v6"
|
|
||||||
elif [[ "${{ matrix.architecture }}" = "armv7" ]]; then
|
|
||||||
echo "::set-output name=platform::linux/arm/v7"
|
|
||||||
elif [[ "${{ matrix.architecture }}" = "aarch64" ]]; then
|
|
||||||
echo "::set-output name=platform::linux/arm64/v8"
|
|
||||||
else
|
|
||||||
echo "::error ::Could not determine platform for architecture ${{ matrix.architecture }}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
- name: ⤵️ Download base image
|
|
||||||
run: docker pull "${{ steps.flags.outputs.from }}"
|
|
||||||
- name: ✅ Verify authenticity of base image
|
|
||||||
run: |
|
|
||||||
vcn authenticate \
|
|
||||||
"docker://${{ steps.flags.outputs.from }}"
|
|
||||||
vcn authenticate \
|
|
||||||
--output json \
|
|
||||||
--signerID 0x03e406879fd89e52f38f4aab0061266d1183980a \
|
|
||||||
"docker://${{ steps.flags.outputs.from }}" \
|
|
||||||
| jq \
|
|
||||||
--exit-status \
|
|
||||||
'.verification.status == 0'
|
|
||||||
- name: 🚀 Build
|
|
||||||
uses: docker/build-push-action@v2.6.1
|
|
||||||
with:
|
|
||||||
push: false
|
|
||||||
context: ${{ needs.information.outputs.target }}
|
|
||||||
file: ${{ needs.information.outputs.target }}/Dockerfile
|
|
||||||
cache-from: |
|
|
||||||
type=local,src=/tmp/.docker-cache
|
|
||||||
ghcr.io/gauthamvarmak/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:edge
|
|
||||||
cache-to: type=local,mode=max,dest=/tmp/.docker-cache-new
|
|
||||||
platforms: ${{ steps.flags.outputs.platform }}
|
|
||||||
build-args: |
|
|
||||||
BUILD_ARCH=${{ matrix.architecture }}
|
|
||||||
BUILD_DATE=${{ steps.flags.outputs.date }}
|
|
||||||
BUILD_DESCRIPTION=${{ needs.information.outputs.description }}
|
|
||||||
BUILD_FROM=${{ steps.flags.outputs.from }}
|
|
||||||
BUILD_NAME=${{ needs.information.outputs.name }}
|
|
||||||
BUILD_REF=${{ github.sha }}
|
|
||||||
BUILD_REPOSITORY=${{ github.repository }}
|
|
||||||
BUILD_VERSION=edge
|
|
||||||
# This ugly bit is necessary, or our cache will grow forever...
|
|
||||||
# Well until we hit GitHub's limit of 5GB :)
|
|
||||||
# https://github.com/docker/build-push-action/issues/252
|
|
||||||
# https://github.com/moby/buildkit/issues/1896
|
|
||||||
- name: 🚚 Swap build cache
|
|
||||||
run: |
|
|
||||||
rm -rf /tmp/.docker-cache
|
|
||||||
mv /tmp/.docker-cache-new /tmp/.docker-cache
|
|
||||||
|
|||||||
@@ -33,10 +33,10 @@ jobs:
|
|||||||
version: ${{ steps.release.outputs.version }}
|
version: ${{ steps.release.outputs.version }}
|
||||||
steps:
|
steps:
|
||||||
- name: ⤵️ Check out code from GitHub
|
- name: ⤵️ Check out code from GitHub
|
||||||
uses: actions/checkout@v2.3.4
|
uses: actions/checkout@v3
|
||||||
- name: 🚀 Run add-on information action
|
- name: 🚀 Run add-on information action
|
||||||
id: information
|
id: information
|
||||||
uses: frenck/action-addon-information@v1.2
|
uses: frenck/action-addon-information@v1.4
|
||||||
- name: ℹ️ Gather version and environment
|
- name: ℹ️ Gather version and environment
|
||||||
id: release
|
id: release
|
||||||
run: |
|
run: |
|
||||||
@@ -53,8 +53,8 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "::set-output name=environment::${environment}"
|
echo "environment=${environment}" >> "$GITHUB_OUTPUT"
|
||||||
echo "::set-output name=version::${version}"
|
echo "version=${version}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
name: 👷 Build & Deploy ${{ matrix.architecture }}
|
name: 👷 Build & Deploy ${{ matrix.architecture }}
|
||||||
@@ -69,63 +69,50 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: ⤵️ Check out code from GitHub
|
- name: ⤵️ Check out code from GitHub
|
||||||
uses: actions/checkout@v2.3.4
|
uses: actions/checkout@v3
|
||||||
- name: 🏗 Set up build cache
|
- name: 🏗 Set up build cache
|
||||||
id: cache
|
id: cache
|
||||||
uses: actions/cache@v2.1.6
|
uses: actions/cache@v3.2.6
|
||||||
with:
|
with:
|
||||||
path: /tmp/.docker-cache
|
path: /tmp/.docker-cache
|
||||||
key: docker-${{ matrix.architecture }}-${{ github.sha }}
|
key: docker-${{ matrix.architecture }}-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
docker-${{ matrix.architecture }}
|
docker-${{ matrix.architecture }}
|
||||||
- name: 🏗 Set up QEMU
|
- name: 🏗 Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v1.2.0
|
uses: docker/setup-qemu-action@v2.1.0
|
||||||
- name: 🏗 Set up Docker Buildx
|
- name: 🏗 Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1.5.1
|
uses: docker/setup-buildx-action@v2.4.1
|
||||||
- name: 🏗 Set up CodeNotary
|
|
||||||
run: bash <(curl https://getvcn.codenotary.com -L)
|
|
||||||
- name: ℹ️ Compose build flags
|
- name: ℹ️ Compose build flags
|
||||||
id: flags
|
id: flags
|
||||||
run: |
|
run: |
|
||||||
echo "::set-output name=date::$(date +"%Y-%m-%dT%H:%M:%SZ")"
|
echo "date=$(date +"%Y-%m-%dT%H:%M:%SZ")" >> "$GITHUB_OUTPUT"
|
||||||
from=$(jq --raw-output ".build_from.${{ matrix.architecture }}" "${{ needs.information.outputs.build }}")
|
from=$(yq --no-colors eval ".build_from.${{ matrix.architecture }}" "${{ needs.information.outputs.build }}")
|
||||||
echo "::set-output name=from::${from}"
|
echo "from=${from}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
if [[ "${{ matrix.architecture}}" = "amd64" ]]; then
|
if [[ "${{ matrix.architecture}}" = "amd64" ]]; then
|
||||||
echo "::set-output name=platform::linux/amd64"
|
echo "platform=linux/amd64" >> "$GITHUB_OUTPUT"
|
||||||
elif [[ "${{ matrix.architecture }}" = "i386" ]]; then
|
elif [[ "${{ matrix.architecture }}" = "i386" ]]; then
|
||||||
echo "::set-output name=platform::linux/386"
|
echo "platform=linux/386" >> "$GITHUB_OUTPUT"
|
||||||
elif [[ "${{ matrix.architecture }}" = "armhf" ]]; then
|
elif [[ "${{ matrix.architecture }}" = "armhf" ]]; then
|
||||||
echo "::set-output name=platform::linux/arm/v6"
|
echo "platform=linux/arm/v6" >> "$GITHUB_OUTPUT"
|
||||||
elif [[ "${{ matrix.architecture }}" = "armv7" ]]; then
|
elif [[ "${{ matrix.architecture }}" = "armv7" ]]; then
|
||||||
echo "::set-output name=platform::linux/arm/v7"
|
echo "platform=linux/arm/v7" >> "$GITHUB_OUTPUT"
|
||||||
elif [[ "${{ matrix.architecture }}" = "aarch64" ]]; then
|
elif [[ "${{ matrix.architecture }}" = "aarch64" ]]; then
|
||||||
echo "::set-output name=platform::linux/arm64/v8"
|
echo "platform=linux/arm64/v8" >> "$GITHUB_OUTPUT"
|
||||||
else
|
else
|
||||||
echo "::error ::Could not determine platform for architecture ${{ matrix.architecture }}"
|
echo "::error ::Could not determine platform for architecture ${{ matrix.architecture }}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- name: 🏗 Login to GitHub Container Registry
|
- name: 🏗 Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v1.10.0
|
uses: docker/login-action@v2.1.0
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.GHRC_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: ⤵️ Download base image
|
- name: ⤵️ Download base image
|
||||||
run: docker pull "${{ steps.flags.outputs.from }}"
|
run: docker pull "${{ steps.flags.outputs.from }}"
|
||||||
- name: ✅ Verify authenticity of base image
|
|
||||||
run: |
|
|
||||||
vcn authenticate \
|
|
||||||
"docker://${{ steps.flags.outputs.from }}"
|
|
||||||
vcn authenticate \
|
|
||||||
--output json \
|
|
||||||
--signerID 0x03e406879fd89e52f38f4aab0061266d1183980a \
|
|
||||||
"docker://${{ steps.flags.outputs.from }}" \
|
|
||||||
| jq \
|
|
||||||
--exit-status \
|
|
||||||
'.verification.status == 0'
|
|
||||||
- name: 🚀 Build
|
- name: 🚀 Build
|
||||||
uses: docker/build-push-action@v2.6.1
|
uses: docker/build-push-action@v7.3.0
|
||||||
with:
|
with:
|
||||||
load: true
|
load: true
|
||||||
# yamllint disable rule:line-length
|
# yamllint disable rule:line-length
|
||||||
@@ -157,26 +144,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
rm -rf /tmp/.docker-cache
|
rm -rf /tmp/.docker-cache
|
||||||
mv /tmp/.docker-cache-new /tmp/.docker-cache
|
mv /tmp/.docker-cache-new /tmp/.docker-cache
|
||||||
- name: 🔏 Notarize
|
|
||||||
# yamllint disable rule:line-length
|
|
||||||
run: |
|
|
||||||
if vcn authenticate \
|
|
||||||
--output json \
|
|
||||||
"docker://ghcr.io/gauthamvarmak/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.version }}" \
|
|
||||||
| jq \
|
|
||||||
--exit-status \
|
|
||||||
'.verification.status != 0';
|
|
||||||
then
|
|
||||||
vcn login
|
|
||||||
vcn notarize \
|
|
||||||
--public \
|
|
||||||
"docker://ghcr.io/gauthamvarmak/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.version }}"
|
|
||||||
fi
|
|
||||||
env:
|
|
||||||
VCN_USER: ${{ secrets.VCN_USER }}
|
|
||||||
VCN_PASSWORD: ${{ secrets.VCN_PASSWORD }}
|
|
||||||
VCN_NOTARIZATION_PASSWORD: ${{ secrets.VCN_NOTARIZATION_PASSWORD }}
|
|
||||||
VCN_OTP_EMPTY: true
|
|
||||||
- name: 🚀 Push
|
- name: 🚀 Push
|
||||||
# yamllint disable rule:line-length
|
# yamllint disable rule:line-length
|
||||||
run: |
|
run: |
|
||||||
@@ -184,3 +151,27 @@ jobs:
|
|||||||
"ghcr.io/gauthamvarmak/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.environment }}"
|
"ghcr.io/gauthamvarmak/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.environment }}"
|
||||||
docker push \
|
docker push \
|
||||||
"ghcr.io/gauthamvarmak/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.version }}"
|
"ghcr.io/gauthamvarmak/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.version }}"
|
||||||
|
|
||||||
|
publish-stable:
|
||||||
|
name: 📢 Publish to stable repository
|
||||||
|
if: needs.information.outputs.environment == 'stable'
|
||||||
|
needs:
|
||||||
|
- information
|
||||||
|
- deploy
|
||||||
|
environment:
|
||||||
|
name: ${{ needs.information.outputs.environment }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: 🚀 Dispatch repository updater update signal
|
||||||
|
uses: peter-evans/repository-dispatch@v2.1.1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.DISPATCH_TOKEN }}
|
||||||
|
repository: ${{ github.repository_owner }}/hassio-addons
|
||||||
|
event-type: update
|
||||||
|
client-payload: >
|
||||||
|
{
|
||||||
|
"addon": "${{ needs.information.outputs.slug }}",
|
||||||
|
"name": "${{ needs.information.outputs.name }}",
|
||||||
|
"repository": "${{ github.repository }}",
|
||||||
|
"version": "${{ github.event.release.tag_name }}"
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,20 +3,10 @@ name: Sync labels
|
|||||||
|
|
||||||
# yamllint disable-line rule:truthy
|
# yamllint disable-line rule:truthy
|
||||||
on:
|
on:
|
||||||
push:
|
schedule:
|
||||||
branches:
|
- cron: "34 5 * * *"
|
||||||
- main
|
workflow_dispatch:
|
||||||
paths:
|
|
||||||
- .github/labels.yml
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
labels:
|
workflows:
|
||||||
name: ♻️ Sync labels
|
uses: hassio-addons/workflows/.github/workflows/labels.yaml@main
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: ⤵️ Check out code from GitHub
|
|
||||||
uses: actions/checkout@v2.3.4
|
|
||||||
- name: 🚀 Run Label Syncer
|
|
||||||
uses: micnncim/action-label-syncer@v1.3.0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|||||||
@@ -8,14 +8,5 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lock:
|
workflows:
|
||||||
name: 🔒 Lock closed issues and PRs
|
uses: hassio-addons/workflows/.github/workflows/lock.yaml@main
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: dessant/lock-threads@v2.1.2
|
|
||||||
with:
|
|
||||||
github-token: ${{ github.token }}
|
|
||||||
issue-lock-inactive-days: "30"
|
|
||||||
issue-lock-reason: ""
|
|
||||||
pr-lock-inactive-days: "1"
|
|
||||||
pr-lock-reason: ""
|
|
||||||
|
|||||||
@@ -4,19 +4,12 @@ name: PR Labels
|
|||||||
# yamllint disable-line rule:truthy
|
# yamllint disable-line rule:truthy
|
||||||
on:
|
on:
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [opened, labeled, unlabeled, synchronize]
|
types:
|
||||||
|
- opened
|
||||||
|
- labeled
|
||||||
|
- unlabeled
|
||||||
|
- synchronize
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pr_labels:
|
workflows:
|
||||||
name: Verify
|
uses: hassio-addons/workflows/.github/workflows/pr-labels.yaml@main
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: 🏷 Verify PR has a valid label
|
|
||||||
uses: jesusvasquez333/verify-pr-label-action@v1.4.0
|
|
||||||
with:
|
|
||||||
pull-request-number: "${{ github.event.pull_request.number }}"
|
|
||||||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
valid-labels: >-
|
|
||||||
breaking-change, bugfix, documentation, enhancement, refactor,
|
|
||||||
performance, new-feature, maintenance, ci, dependencies
|
|
||||||
disable-reviews: true
|
|
||||||
|
|||||||
@@ -8,11 +8,5 @@ on:
|
|||||||
- main
|
- main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update_release_draft:
|
workflows:
|
||||||
name: ✏️ Draft release
|
uses: hassio-addons/workflows/.github/workflows/release-drafter.yaml@main
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: 🚀 Run Release Drafter
|
|
||||||
uses: release-drafter/release-drafter@v5.15.0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|||||||
@@ -8,33 +8,5 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
stale:
|
workflows:
|
||||||
name: 🧹 Clean up stale issues and PRs
|
uses: hassio-addons/workflows/.github/workflows/stale.yaml@main
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: 🚀 Run stale
|
|
||||||
uses: actions/stale@v4
|
|
||||||
with:
|
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
days-before-stale: 30
|
|
||||||
days-before-close: 7
|
|
||||||
remove-stale-when-updated: true
|
|
||||||
stale-issue-label: "stale"
|
|
||||||
exempt-issue-labels: "no-stale,help-wanted"
|
|
||||||
stale-issue-message: >
|
|
||||||
There hasn't been any activity on this issue recently, so we
|
|
||||||
clean up some of the older and inactive issues.
|
|
||||||
|
|
||||||
Please make sure to update to the latest version and
|
|
||||||
check if that solves the issue. Let us know if that works for you
|
|
||||||
by leaving a comment 👍
|
|
||||||
|
|
||||||
This issue has now been marked as stale and will be closed if no
|
|
||||||
further activity occurs. Thanks!
|
|
||||||
stale-pr-label: "stale"
|
|
||||||
exempt-pr-labels: "no-stale"
|
|
||||||
stale-pr-message: >
|
|
||||||
There hasn't been any activity on this pull request recently. This
|
|
||||||
pull request has been automatically marked as stale because of that
|
|
||||||
and will be closed if no further activity occurs within 7 days.
|
|
||||||
Thank you for your contributions.
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# MIT License
|
# MIT License
|
||||||
|
|
||||||
Copyright (c) 2021-2021 Gautham varma K
|
Copyright (c) 2021-2023 Gautham varma K
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ check [the contributor's page][contributors].
|
|||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2021 GauthamVarmaK
|
Copyright (c) 2021-2023 GauthamVarmaK
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -96,7 +96,7 @@ SOFTWARE.
|
|||||||
[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg
|
[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg
|
||||||
[issue]: https://github.com/GauthamVarmaK/addon-tvheadend/issues
|
[issue]: https://github.com/GauthamVarmaK/addon-tvheadend/issues
|
||||||
[license-shield]: https://img.shields.io/github/license/GauthamVarmaK/addon-tvheadend.svg
|
[license-shield]: https://img.shields.io/github/license/GauthamVarmaK/addon-tvheadend.svg
|
||||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
|
[maintenance-shield]: https://img.shields.io/maintenance/yes/2023.svg
|
||||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
|
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
|
||||||
[releases-shield]: https://img.shields.io/github/release/GauthamVarmaK/addon-tvheadend.svg
|
[releases-shield]: https://img.shields.io/github/release/GauthamVarmaK/addon-tvheadend.svg
|
||||||
[releases]: https://github.com/GauthamVarmaK/addon-tvheadend/releases
|
[releases]: https://github.com/GauthamVarmaK/addon-tvheadend/releases
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Have included the following along with TVHeadend:
|
|||||||
|
|
||||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||||
[forum]: https://community.home-assistant.io/u/gauthamvarmak
|
[forum]: https://community.home-assistant.io/u/gauthamvarmak
|
||||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
|
[maintenance-shield]: https://img.shields.io/maintenance/yes/2023.svg
|
||||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
|
[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-shield]: https://img.shields.io/badge/version-{{ version }}-blue.svg
|
||||||
[release]: {{ repo }}/tree/{{ version }}
|
[release]: {{ repo }}/tree/{{ version }}
|
||||||
|
|||||||
+41
-7
@@ -17,7 +17,8 @@ Have included the following along with TVHeadend:
|
|||||||
The installation of this add-on is pretty straightforward and not different in
|
The installation of this add-on is pretty straightforward and not different in
|
||||||
comparison to installing any other Home Assistant add-on.
|
comparison to installing any other Home Assistant add-on.
|
||||||
|
|
||||||
1. Install "Gautham's Add-ons" in supervisor.
|
1. Add this repository to have addons by GauthamVarmaK:
|
||||||
|
[![Home Assistant with repository URL pre-filled][my-ha-shield]][my-ha-repo]
|
||||||
1. Search for the "TVHeadend" add-on in the Supervisor add-on store and install it.
|
1. Search for the "TVHeadend" add-on in the Supervisor add-on store and install it.
|
||||||
1. Start the "TVHeadend" add-on.
|
1. Start the "TVHeadend" add-on.
|
||||||
1. Check the logs of the "TVHeadend" to see if everything went well.
|
1. Check the logs of the "TVHeadend" to see if everything went well.
|
||||||
@@ -26,11 +27,40 @@ comparison to installing any other Home Assistant add-on.
|
|||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
No changes needed from the user, unless u need to change the ports.
|
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||||
|
|
||||||
-Config files are stored in /config/tvheadend/
|
Example add-on configuration:
|
||||||
-Recording files are stored in /config/tvheadend/recordings/
|
|
||||||
Consider, backing them up whenever migrating.
|
```yaml
|
||||||
|
system_packages:
|
||||||
|
- ffmpeg
|
||||||
|
init_commands:
|
||||||
|
- echo 'Hello World'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
||||||
|
|
||||||
|
### Option: `system_packages`
|
||||||
|
|
||||||
|
Allows you to specify additional [Alpine packages][alpine-packages] to be
|
||||||
|
installed to the TVHeadend Addon (e.g., `ffmpeg`, `g++`, etc. ).
|
||||||
|
|
||||||
|
**Note**: _Adding many packages will result in a longer start-up time for the add-on._
|
||||||
|
|
||||||
|
### Option: `init_commands`
|
||||||
|
|
||||||
|
Customize your TVHeadend environment even more with the `init_commands` option.
|
||||||
|
Add one or more shell commands to the list, and they will be executed
|
||||||
|
every single time this add-on starts.
|
||||||
|
|
||||||
|
## Additional Details
|
||||||
|
|
||||||
|
- Config files are stored in `/config/tvheadend/`
|
||||||
|
- Recording files are stored in `/config/tvheadend/recordings/`
|
||||||
|
- `/dev/dvb/`, `/dev/dri/` would be respectively mapped to
|
||||||
|
`/dev/dvb/`, `/dev/dri/` inside the addon.
|
||||||
|
|
||||||
|
Consider, backing `/config/tvheadend/` up whenever migrating.
|
||||||
|
|
||||||
## Changelog & Releases
|
## Changelog & Releases
|
||||||
|
|
||||||
@@ -64,7 +94,7 @@ This has been possible thanks to the community add-ons initiative by [Frenck][fr
|
|||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2021 GauthamVarmaK
|
Copyright (c) 2021-2023 GauthamVarmaK
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -84,8 +114,12 @@ 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
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
|
[alpine-packages]: https://pkgs.alpinelinux.org/packages
|
||||||
[forum]: https://community.home-assistant.io/
|
[forum]: https://community.home-assistant.io/
|
||||||
[gautham]: https://github.com/GauthamVarmaK
|
|
||||||
[frenck]: https://github.com/frenck
|
[frenck]: https://github.com/frenck
|
||||||
|
[gautham]: https://github.com/GauthamVarmaK
|
||||||
|
[my-ha-shield]: https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg
|
||||||
[issue]: https://github.com/GauthamVarmaK/addon-tvheadend/issues
|
[issue]: https://github.com/GauthamVarmaK/addon-tvheadend/issues
|
||||||
|
[semver]: http://semver.org/spec/v2.0.0.htm
|
||||||
|
[my-ha-repo]: https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2FGauthamVarmaK%2Fhassio-addons
|
||||||
[releases]: https://github.com/GauthamVarmaK/addon-tvheadend/releases
|
[releases]: https://github.com/GauthamVarmaK/addon-tvheadend/releases
|
||||||
|
|||||||
+23
-6
@@ -1,13 +1,30 @@
|
|||||||
ARG BUILD_FROM=ghcr.io/hassio-addons/base/amd64:10.0.1
|
ARG BUILD_FROM
|
||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM ${BUILD_FROM}
|
FROM ${BUILD_FROM}
|
||||||
|
|
||||||
COPY run.sh /run.sh
|
COPY requirements.txt /tmp/
|
||||||
RUN chmod +x /run.sh
|
|
||||||
RUN /run.sh
|
|
||||||
|
|
||||||
RUN echo "Starting TVHeadend"
|
RUN \
|
||||||
ENTRYPOINT ["/usr/bin/tvheadend", "--firstrun", "-u", "root", "-g", "root", "-c", "/config/tvheadend"]
|
apk update \
|
||||||
|
&& apk add --no-cache --virtual .build-deps \
|
||||||
|
musl-dev=1.2.3-r4 \
|
||||||
|
gcc=12.2.1_git20220924-r4 \
|
||||||
|
g++=12.2.1_git20220924-r4 \
|
||||||
|
libxml2-dev=2.10.3-r1 \
|
||||||
|
libxslt-dev=1.1.37-r0 \
|
||||||
|
python3-dev=3.10.10-r0 \
|
||||||
|
&& apk add --no-cache \
|
||||||
|
tvheadend=4.2.8-r6 \
|
||||||
|
py3-pip=22.3.1-r1 \
|
||||||
|
libxslt=1.1.37-r0 \
|
||||||
|
&& pip3 install \
|
||||||
|
--no-cache-dir \
|
||||||
|
--prefer-binary \
|
||||||
|
-r /tmp/requirements.txt \
|
||||||
|
&& apk del --no-cache --purge .build-deps
|
||||||
|
|
||||||
|
# Copy root filesystem
|
||||||
|
COPY rootfs /
|
||||||
|
|
||||||
# Build arguments
|
# Build arguments
|
||||||
ARG BUILD_ARCH
|
ARG BUILD_ARCH
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"build_from": {
|
|
||||||
"aarch64": "ghcr.io/hassio-addons/base/aarch64:10.0.1",
|
|
||||||
"amd64": "ghcr.io/hassio-addons/base/amd64:10.0.1",
|
|
||||||
"armhf": "ghcr.io/hassio-addons/base/armhf:10.0.1",
|
|
||||||
"armv7": "ghcr.io/hassio-addons/base/armv7:10.0.1",
|
|
||||||
"i386": "ghcr.io/hassio-addons/base/i386:10.0.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
build_from:
|
||||||
|
aarch64: ghcr.io/hassio-addons/base/aarch64:13.1.1
|
||||||
|
amd64: ghcr.io/hassio-addons/base/amd64:13.1.1
|
||||||
|
armhf: ghcr.io/hassio-addons/base/armhf:13.1.1
|
||||||
|
armv7: ghcr.io/hassio-addons/base/armv7:13.1.1
|
||||||
|
i386: ghcr.io/hassio-addons/base/i386:13.1.1
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "TVHeadend",
|
|
||||||
"version": "dev",
|
|
||||||
"stage": "experimental",
|
|
||||||
"slug": "addon-tvheadend",
|
|
||||||
"description": "TV streaming server and recorder.",
|
|
||||||
"url": "https://github.com/GauthamVarmaK/addon-tvheadend",
|
|
||||||
"startup": "services",
|
|
||||||
"arch": ["aarch64", "amd64", "armhf", "armv7", "i386"],
|
|
||||||
"webui": "http://[HOST]:[PORT:9981]/",
|
|
||||||
"ports": {
|
|
||||||
"9981/tcp": 9981,
|
|
||||||
"9982/tcp": 9982
|
|
||||||
},
|
|
||||||
"ports_description": {
|
|
||||||
"9981/tcp": "TVH Web Interface",
|
|
||||||
"9982/tcp": "TVH HTSP"
|
|
||||||
},
|
|
||||||
"map": ["config:rw"]
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
name: TVHeadend
|
||||||
|
version: dev
|
||||||
|
stage: experimental
|
||||||
|
slug: tvheadend
|
||||||
|
description: TV streaming server and recorder.
|
||||||
|
url: "https://github.com/GauthamVarmaK/addon-tvheadend"
|
||||||
|
init: false
|
||||||
|
arch:
|
||||||
|
- aarch64
|
||||||
|
- amd64
|
||||||
|
- armhf
|
||||||
|
- armv7
|
||||||
|
- i386
|
||||||
|
webui: "http://[HOST]:[PORT:9981]/"
|
||||||
|
devices:
|
||||||
|
- /dev/dvb
|
||||||
|
- /dev/dri
|
||||||
|
ports:
|
||||||
|
9981/tcp: 9981
|
||||||
|
9982/tcp: 9982
|
||||||
|
ports_description:
|
||||||
|
9981/tcp: TVH Web Interface
|
||||||
|
9982/tcp: TVH HTSP
|
||||||
|
map:
|
||||||
|
- "config:rw"
|
||||||
|
options:
|
||||||
|
system_packages: []
|
||||||
|
init_commands: []
|
||||||
|
schema:
|
||||||
|
system_packages:
|
||||||
|
- str
|
||||||
|
init_commands:
|
||||||
|
- str
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
setuptools==67.4.0
|
||||||
|
streamlink==5.3.1
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
0 0 * * * /config/tvheadend/wg++/run.sh
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
#!/command/with-contenv bashio
|
||||||
|
# shellcheck shell=bash
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Take down the S6 supervision tree when cron fails
|
||||||
|
# ==============================================================================
|
||||||
|
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="cron"
|
||||||
|
|
||||||
|
bashio::log.info \
|
||||||
|
"Service ${service} exited with code ${exit_code_service}" \
|
||||||
|
"(by signal ${exit_code_signal})"
|
||||||
|
|
||||||
|
if [[ "${exit_code_service}" -eq 256 ]]; then
|
||||||
|
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||||
|
echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode
|
||||||
|
fi
|
||||||
|
[[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt
|
||||||
|
elif [[ "${exit_code_service}" -ne 0 ]]; then
|
||||||
|
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||||
|
echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode
|
||||||
|
fi
|
||||||
|
exec /run/s6/basedir/bin/halt
|
||||||
|
fi
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
# shellcheck shell=bash
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Runs the cron daemon
|
||||||
|
# ==============================================================================
|
||||||
|
exec fdmove -c 2 1 /usr/sbin/crond -f -L /var/log/cron -l 0 -c /etc/crontabs
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
longrun
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
# shellcheck shell=bash
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Executes user customizations on startup
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# Install user configured/requested packages
|
||||||
|
if bashio::config.has_value 'system_packages'; then
|
||||||
|
apk update \
|
||||||
|
|| bashio::exit.nok 'Failed updating Alpine packages repository indexes'
|
||||||
|
|
||||||
|
for package in $(bashio::config 'system_packages'); do
|
||||||
|
apk add "$package" \
|
||||||
|
|| bashio::exit.nok "Failed installing system package ${package}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Executes user commands on startup
|
||||||
|
if bashio::config.has_value 'init_commands'; then
|
||||||
|
while read -r cmd; do
|
||||||
|
eval "${cmd}" \
|
||||||
|
|| bashio::exit.nok "Failed executing init command: ${cmd}"
|
||||||
|
done <<< "$(bashio::config 'init_commands')"
|
||||||
|
fi
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
oneshot
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/etc/s6-overlay/s6-rc.d/init-customizations/run
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
# shellcheck shell=bash
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Executes user customizations on startup
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
check_webgrabplus(){
|
||||||
|
if [ -z "$(ls -A /config/tvheadend/wg++)" ]; then return 1; else return 0; fi
|
||||||
|
}
|
||||||
|
|
||||||
|
webgrabplus_install(){
|
||||||
|
if apk update; then
|
||||||
|
bashio::log.info '[Webgrab+] APK: Installing required packages.'
|
||||||
|
if apk add --no-cache --virtual .build-deps git mono --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing; then
|
||||||
|
bashio::log.info '[Webgrab+] Installing Webgrab+.'
|
||||||
|
cd /tmp \
|
||||||
|
&& wget http://webgrabplus.com/sites/default/files/download/SW/V3.3.0/WebGrabPlus_V3.3_install.tar.gz \
|
||||||
|
&& tar -zxvf WebGrabPlus_V3.3_install.tar.gz \
|
||||||
|
&& rm WebGrabPlus_V3.3_install.tar.gz \
|
||||||
|
&& mv .wg++/ /config/tvheadend/wg++ \
|
||||||
|
&& cd /config/tvheadend/wg++ \
|
||||||
|
&& ./install.sh \
|
||||||
|
&& rm -rf siteini.pack/ \
|
||||||
|
&& wget http://webgrabplus.com/sites/default/files/download/ini/SiteIniPack_current.zip \
|
||||||
|
&& unzip SiteIniPack_current.zip \
|
||||||
|
&& rm SiteIniPack_current.zip \
|
||||||
|
&& cp siteini.pack/India/* siteini.user/ \
|
||||||
|
&& wget -O /usr/bin/tv_grab_wg++ http://www.webgrabplus.com/sites/default/files/tv_grab_wg.txt \
|
||||||
|
&& sed -i 's|~/.wg++/guide.xml|/config/tvheadend/wg++/guide.xml|g' /usr/bin/tv_grab_wg++ \
|
||||||
|
&& chmod a+x /usr/bin/tv_grab_wg++
|
||||||
|
else
|
||||||
|
bashio::log.info '[Webgrab+] APK: Critical error. Unable install required packages.'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
bashio::log.info '[Webgrab+] APK: Removing packages no longer required.'
|
||||||
|
apk del --no-cache --purge .build-deps
|
||||||
|
else
|
||||||
|
bashio::log.error '[Webgrab+] APK: Critical error. Unable to update pkg list. Check connectivity.'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
bashio::log.info '[Webgrab+] Finsihed all APK and PIP3 updates and installs.'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ensure directory exists
|
||||||
|
if ! bashio::fs.directory_exists '/config/tvheadend/'; then
|
||||||
|
bashio::log.info "Creating default configuration directory at /config/tvheadend/"
|
||||||
|
mkdir -p /config/tvheadend/recordings
|
||||||
|
timeout 20s /usr/bin/tvheadend --firstrun -u root -g root -c /config/tvheadend
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_webgrabplus; then
|
||||||
|
bashio::log.info "[Webgrab+] Webgrab+ already installed"
|
||||||
|
else
|
||||||
|
bashio::log.info "[Webgrab+] No webgrab+ installation found - Installing webgrab+"
|
||||||
|
webgrabplus_install
|
||||||
|
chmod +x /usr/bin/restart_addon
|
||||||
|
exec /usr/bin/restart_addon
|
||||||
|
fi
|
||||||
|
|
||||||
|
bashio::log.info '[Webgrab+] Setup completed without errors!!'
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
oneshot
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/etc/s6-overlay/s6-rc.d/init-tvheadend/run
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
#!/command/with-contenv bashio
|
||||||
|
# shellcheck shell=bash
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Take down the S6 supervision tree when tvheadend fails
|
||||||
|
# ==============================================================================
|
||||||
|
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="tvheadend"
|
||||||
|
|
||||||
|
bashio::log.info \
|
||||||
|
"Service ${service} exited with code ${exit_code_service}" \
|
||||||
|
"(by signal ${exit_code_signal})"
|
||||||
|
|
||||||
|
if [[ "${exit_code_service}" -eq 256 ]]; then
|
||||||
|
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||||
|
echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode
|
||||||
|
fi
|
||||||
|
[[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt
|
||||||
|
elif [[ "${exit_code_service}" -ne 0 ]]; then
|
||||||
|
if [[ "${exit_code_container}" -eq 0 ]]; then
|
||||||
|
echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode
|
||||||
|
fi
|
||||||
|
exec /run/s6/basedir/bin/halt
|
||||||
|
fi
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
# shellcheck shell=bash
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Starts TVHeadend
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
bashio::log.info "Starting TVHeadend..."
|
||||||
|
|
||||||
|
exec /usr/bin/tvheadend -u root -g root -c /config/tvheadend
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
longrun
|
||||||
Executable
+9
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bashio
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Restarts the add-on
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
echo "Restarting add-on"
|
||||||
|
|
||||||
|
bashio::addon.restart
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
#!/usr/bin/env bashio
|
|
||||||
|
|
||||||
bashio::log.info "[TVHeadend] Installing TVHeadend"
|
|
||||||
apk update && apk add --no-cache tvheadend=4.2.8-r3
|
|
||||||
|
|
||||||
mkdir -p /config/tvheadend/recordings
|
|
||||||
|
|
||||||
bashio::log.info '[TVHeadend] Setup completed without errors!!'
|
|
||||||
|
|
||||||
check_webgrabplus(){
|
|
||||||
if [ -z "$(ls -A /config/tvheadend/wg++)" ]; then return 1; else return 0; fi
|
|
||||||
}
|
|
||||||
|
|
||||||
webgrabplus_install(){
|
|
||||||
if apk update; then
|
|
||||||
bashio::log.info '[Webgrab+] APK: Installing required packages.'
|
|
||||||
if apk add --no-cache --virtual .build-deps git mono --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing; then
|
|
||||||
bashio::log.info '[Webgrab+] Installing Webgrab+.'
|
|
||||||
mkdir -p ~/.wg++
|
|
||||||
ln -sf /config/tvheadend/wg++/guide.xml ~/.wg++/guide.xml
|
|
||||||
cd /tmp && \
|
|
||||||
wget http://webgrabplus.com/sites/default/files/download/SW/V3.2.0/WebGrabPlus_V3.2_install.tar.gz && \
|
|
||||||
tar -xvf WebGrabPlus_V3.2_install.tar.gz && rm WebGrabPlus_V3.2_install.tar.gz && \
|
|
||||||
mv .wg++/ /config/tvheadend/wg++ && cd /config/tvheadend/wg++ && ./install.sh
|
|
||||||
rm -rf siteini.pack/ && \
|
|
||||||
wget http://webgrabplus.com/sites/default/files/download/ini/SiteIniPack_current.zip && \
|
|
||||||
unzip SiteIniPack_current.zip && rm SiteIniPack_current.zip && \
|
|
||||||
cp siteini.pack/India/* siteini.user/
|
|
||||||
|
|
||||||
wget -O /usr/bin/tv_grab_wg++ http://www.webgrabplus.com/sites/default/files/tv_grab_wg.txt && \
|
|
||||||
chmod a+x /usr/bin/tv_grab_wg++
|
|
||||||
|
|
||||||
echo "0 0 * * * /config/tvheadend/wg++/run.sh" >> /var/spool/cron/root
|
|
||||||
crond
|
|
||||||
else
|
|
||||||
bashio::log.info '[Webgrab+] APK: Critical error. Unable install required packages.'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
bashio::log.info '[Webgrab+] APK: Removing packages no longer required.'
|
|
||||||
apk del .build-deps git mono
|
|
||||||
else
|
|
||||||
bashio::log.error '[Webgrab+] APK: Critical error. Unable to update pkg list. Check connectivity.'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
bashio::log.info '[Webgrab+] Finsihed all APK and PIP3 updates and installs.'
|
|
||||||
}
|
|
||||||
|
|
||||||
if check_webgrabplus; then
|
|
||||||
bashio::log.info "[Webgrab+] Webgrab+ already installed"
|
|
||||||
else
|
|
||||||
bashio::log.info "[Webgrab+] No webgrab+ installation found - Installing webgrab+"
|
|
||||||
webgrabplus_install
|
|
||||||
fi
|
|
||||||
|
|
||||||
bashio::log.info '[Webgrab+] Setup completed without errors!!'
|
|
||||||
|
|
||||||
check_streamlink () {
|
|
||||||
if [ -z "$(command -v streamlink)" ]; then return 1; else return 0; fi
|
|
||||||
}
|
|
||||||
|
|
||||||
streamlink_update () {
|
|
||||||
if pip3 install --no-cache --upgrade streamlink; then
|
|
||||||
bashio::log.info "[StreamLink] Streamlink version: $(streamlink --version)."
|
|
||||||
else
|
|
||||||
bashio::log.error '[StreamLink] Streamlink update failed!'
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
streamlink_install () {
|
|
||||||
bashio::log.info '[StreamLink] APK: Updating pkg list.'
|
|
||||||
if apk update; then
|
|
||||||
bashio::log.info '[StreamLink] APK: Installing required packages.'
|
|
||||||
if apk add --no-cache py3-pip && apk add --no-cache --virtual .build-deps musl-dev gcc; then
|
|
||||||
bashio::log.info '[StreamLink] PIP3: Updating and installing required packages.'
|
|
||||||
if ! pip3 install --no-cache --upgrade setuptools; then bashio::log.error '[StreamLink] PIP3: Error while upgrading setuptools.'; fi
|
|
||||||
if ! pip3 install --no-cache streamlink; then bashio::log.error '[StreamLink] PIP3: Error while installing Streamlink.'; fi
|
|
||||||
else
|
|
||||||
bashio::log.info '[StreamLink] APK: Critical error. Unable install required packages.'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
bashio::log.info '[StreamLink] APK: Removing packages no longer required.'
|
|
||||||
apk del .build-deps gcc musl-dev
|
|
||||||
else
|
|
||||||
bashio::log.error '[StreamLink] APK: Critical error. Unable to update pkg list. Check connectivity.'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
bashio::log.info '[StreamLink] Finsihed all APK and PIP3 updates and installs.'
|
|
||||||
}
|
|
||||||
|
|
||||||
if check_streamlink; then
|
|
||||||
bashio::log.info '[StreamLink] Updating Streamlink...' ; streamlink_update
|
|
||||||
else
|
|
||||||
bashio::log.info '[StreamLink] Installing Streamlink...'; streamlink_install
|
|
||||||
fi
|
|
||||||
|
|
||||||
bashio::log.info '[StreamLink] Setup completed without errors!!'
|
|
||||||
Reference in New Issue
Block a user