mirror of
https://github.com/hassio-addons/addon-prometheus.git
synced 2025-05-04 19:21:35 +00:00
🚜 Modernize add-on structure/CI
This commit is contained in:
parent
45a1472929
commit
3c13960284
29 changed files with 2720 additions and 484 deletions
|
@ -1,19 +0,0 @@
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
end_of_line = lf
|
|
||||||
indent_style = space
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
ident_size = 4
|
|
||||||
|
|
||||||
[*.md]
|
|
||||||
ident_size = 2
|
|
||||||
trim_trailing_whitespace = false
|
|
||||||
|
|
||||||
[*.json]
|
|
||||||
ident_size = 2
|
|
||||||
|
|
||||||
[{.gitignore,.gitkeep,.editorconfig}]
|
|
||||||
ident_size = 2
|
|
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
|
@ -1,4 +1 @@
|
||||||
# Require maintainer's :+1: for changes to the .github/ repo-config files
|
|
||||||
# mainly due to https://github.com/probot/settings privilege escalation
|
|
||||||
.github/* @frenck
|
.github/* @frenck
|
||||||
.gitlab-ci.yml @frenck
|
|
||||||
|
|
133
.github/CODE_OF_CONDUCT.md
vendored
Normal file
133
.github/CODE_OF_CONDUCT.md
vendored
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
# 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 at
|
||||||
|
frenck@frenck.dev.
|
||||||
|
|
||||||
|
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
|
0
CONTRIBUTING.md → .github/CONTRIBUTING.md
vendored
0
CONTRIBUTING.md → .github/CONTRIBUTING.md
vendored
1839
.github/SECURITY.md
vendored
Normal file
1839
.github/SECURITY.md
vendored
Normal file
File diff suppressed because it is too large
Load diff
2
.github/autolabeler.yml
vendored
2
.github/autolabeler.yml
vendored
|
@ -1,2 +0,0 @@
|
||||||
---
|
|
||||||
"Type: Documentation": ["*.md", "*.j2"]
|
|
50
.github/config.yml
vendored
50
.github/config.yml
vendored
|
@ -1,50 +0,0 @@
|
||||||
---
|
|
||||||
# Configuration for request-info - https://github.com/behaviorbot/request-info
|
|
||||||
|
|
||||||
# *OPTIONAL* Comment to reply with
|
|
||||||
# Can be either a string :
|
|
||||||
requestInfoReplyComment:
|
|
||||||
- "We would appreciate it if you could provide us with more info about this issue/pr!"
|
|
||||||
- "Hmmm... That issue/PR is kinda low on text. Could you please provide some more content?"
|
|
||||||
|
|
||||||
# *OPTIONAL* default titles to check against for lack of descriptiveness
|
|
||||||
# MUST BE ALL LOWERCASE
|
|
||||||
requestInfoDefaultTitles: []
|
|
||||||
|
|
||||||
# *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given
|
|
||||||
requestInfoLabelToAdd: "Incomplete"
|
|
||||||
|
|
||||||
# *OPTIONAL* Require Pull Requests to contain more information than what is provided in the PR template
|
|
||||||
# Will fail if the pull request's body is equal to the provided template
|
|
||||||
checkPullRequestTemplate: true
|
|
||||||
|
|
||||||
# *OPTIONAL* Only warn about insufficient information on these events type
|
|
||||||
# Keys must be lowercase. Valid values are 'issue' and 'pullRequest'
|
|
||||||
requestInfoOn:
|
|
||||||
pullRequest: true
|
|
||||||
issue: true
|
|
||||||
|
|
||||||
# *OPTIONAL* Add a list of people whose Issues/PRs will not be commented on
|
|
||||||
# keys must be GitHub usernames
|
|
||||||
requestInfoUserstoExclude: []
|
|
||||||
|
|
||||||
# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome
|
|
||||||
|
|
||||||
# Comment to be posted to on first time issues
|
|
||||||
newIssueWelcomeComment: >
|
|
||||||
:wave: Thanks for opening your first issue here!
|
|
||||||
If you're reporting a :bug: bug, please make sure you include steps to reproduce it.
|
|
||||||
Also, logs, error messages and information about your hardware might be useful.
|
|
||||||
|
|
||||||
# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
|
|
||||||
|
|
||||||
# Comment to be posted to on PRs from first time contributors in your repository
|
|
||||||
newPRWelcomeComment: >
|
|
||||||
:sparkling_heart: Thanks for opening this pull request! :sparkling_heart:
|
|
||||||
If your PR gets accepted and merged in, we will invite you to the project :tada:
|
|
||||||
|
|
||||||
# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge
|
|
||||||
|
|
||||||
# Comment to be posted to on pull requests merged by a first time user
|
|
||||||
firstPRMergeComment: >
|
|
||||||
Congrats on merging your first pull request! :tada::tada::tada:
|
|
8
.github/dependabot.yaml
vendored
Normal file
8
.github/dependabot.yaml
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
time: "06:00"
|
10
.github/invite-contributors.yml
vendored
10
.github/invite-contributors.yml
vendored
|
@ -1,10 +0,0 @@
|
||||||
---
|
|
||||||
# If true, this will add new contributors as outside collaborators
|
|
||||||
# to the repo their PR was merged in. Team name is ignored if this
|
|
||||||
# flag is set to true.
|
|
||||||
isOutside: false
|
|
||||||
|
|
||||||
# Specify team name to add new contributors to a specific team
|
|
||||||
# within your organization.
|
|
||||||
# Use team name or team-name-slug
|
|
||||||
team: Contributors
|
|
85
.github/labels.yml
vendored
Normal file
85
.github/labels.yml
vendored
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
---
|
||||||
|
- 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."
|
20
.github/lock.yml
vendored
20
.github/lock.yml
vendored
|
@ -1,20 +0,0 @@
|
||||||
---
|
|
||||||
# Configuration for lock-threads - https://github.com/dessant/lock-threads
|
|
||||||
# Number of days of inactivity before a closed issue or pull request is locked
|
|
||||||
daysUntilLock: 30
|
|
||||||
|
|
||||||
# Comment to post before locking. Set to `false` to disable
|
|
||||||
lockComment: >
|
|
||||||
This thread has been automatically locked because it has not had recent
|
|
||||||
activity. Please open a new issue for related bugs and link to relevant
|
|
||||||
comments in this thread.
|
|
||||||
|
|
||||||
# Issues or pull requests with these labels will not be locked
|
|
||||||
# exemptLabels:
|
|
||||||
# - no-locking
|
|
||||||
|
|
||||||
# Limit to only `issues` or `pulls`
|
|
||||||
# only: issues
|
|
||||||
|
|
||||||
# Add a label when locking. Set to `false` to disable
|
|
||||||
lockLabel: false
|
|
20
.github/move.yml
vendored
20
.github/move.yml
vendored
|
@ -1,20 +0,0 @@
|
||||||
---
|
|
||||||
# Delete the command comment when it contains no other content
|
|
||||||
deleteCommand: true
|
|
||||||
|
|
||||||
# Close the source issue after moving
|
|
||||||
closeSourceIssue: true
|
|
||||||
|
|
||||||
# Lock the source issue after moving
|
|
||||||
lockSourceIssue: true
|
|
||||||
|
|
||||||
# Mention issue and comment authors
|
|
||||||
mentionAuthors: true
|
|
||||||
|
|
||||||
# Preserve mentions in the issue content
|
|
||||||
keepContentMentions: false
|
|
||||||
|
|
||||||
# Set custom aliases for targets
|
|
||||||
# aliases:
|
|
||||||
# r: repo
|
|
||||||
# or: owner/repo
|
|
13
.github/no-response.yml
vendored
13
.github/no-response.yml
vendored
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
# Configuration for probot-no-response - https://github.com/probot/no-response
|
|
||||||
# Number of days of inactivity before an Issue is closed for lack of response
|
|
||||||
daysUntilClose: 14
|
|
||||||
# Label requiring a response
|
|
||||||
responseRequiredLabel: "Status: Awaiting response"
|
|
||||||
# Comment to post when closing an Issue for lack of response. Set to `false` to disable
|
|
||||||
closeComment: >
|
|
||||||
This issue has been automatically closed because there has been no response
|
|
||||||
to our request for more information from the original author. With only the
|
|
||||||
information that is currently in the issue, we don't have enough information
|
|
||||||
to take action. Please reach out if you have or find the answers we need so
|
|
||||||
that we can investigate further.
|
|
14
.github/potential-duplicates.yml
vendored
14
.github/potential-duplicates.yml
vendored
|
@ -1,14 +0,0 @@
|
||||||
---
|
|
||||||
# Label name and color to set, when potential duplicates are detected
|
|
||||||
issueLabel: "Potential duplicate"
|
|
||||||
labelColor: e6e6e6
|
|
||||||
|
|
||||||
# If similarity is higher than this threshold, issue will be marked as duplicate
|
|
||||||
threshold: 0.70
|
|
||||||
|
|
||||||
# Comment to post when potential duplicates are detected
|
|
||||||
referenceComment: >
|
|
||||||
Potential duplicates found:
|
|
||||||
{{#issues}}
|
|
||||||
- [#{{ number }}] {{ title }} ({{ accuracy }}%)
|
|
||||||
{{/issues}}
|
|
57
.github/release-drafter.yml
vendored
Normal file
57
.github/release-drafter.yml
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
---
|
||||||
|
name-template: "v$RESOLVED_VERSION"
|
||||||
|
tag-template: "v$RESOLVED_VERSION"
|
||||||
|
change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
|
||||||
|
sort-direction: ascending
|
||||||
|
|
||||||
|
categories:
|
||||||
|
- title: "🚨 Breaking changes"
|
||||||
|
labels:
|
||||||
|
- "breaking-change"
|
||||||
|
- title: "✨ New features"
|
||||||
|
labels:
|
||||||
|
- "new-feature"
|
||||||
|
- title: "🐛 Bug fixes"
|
||||||
|
labels:
|
||||||
|
- "bugfix"
|
||||||
|
- title: "🚀 Enhancements"
|
||||||
|
labels:
|
||||||
|
- "enhancement"
|
||||||
|
- "refactor"
|
||||||
|
- "performance"
|
||||||
|
- title: "🧰 Maintenance"
|
||||||
|
labels:
|
||||||
|
- "maintenance"
|
||||||
|
- "ci"
|
||||||
|
- title: "📚 Documentation"
|
||||||
|
labels:
|
||||||
|
- "documentation"
|
||||||
|
- title: "⬆️ Dependency updates"
|
||||||
|
labels:
|
||||||
|
- "dependencies"
|
||||||
|
|
||||||
|
version-resolver:
|
||||||
|
major:
|
||||||
|
labels:
|
||||||
|
- "major"
|
||||||
|
- "breaking-change"
|
||||||
|
minor:
|
||||||
|
labels:
|
||||||
|
- "minor"
|
||||||
|
- "new-feature"
|
||||||
|
patch:
|
||||||
|
labels:
|
||||||
|
- "bugfix"
|
||||||
|
- "chore"
|
||||||
|
- "ci"
|
||||||
|
- "dependencies"
|
||||||
|
- "documentation"
|
||||||
|
- "enhancement"
|
||||||
|
- "performance"
|
||||||
|
- "refactor"
|
||||||
|
default: patch
|
||||||
|
|
||||||
|
template: |
|
||||||
|
## What’s changed
|
||||||
|
|
||||||
|
$CHANGES
|
150
.github/settings.yml
vendored
150
.github/settings.yml
vendored
|
@ -1,150 +0,0 @@
|
||||||
---
|
|
||||||
repository:
|
|
||||||
description: "Prometheus - Home Assistant Community Add-ons"
|
|
||||||
homepage: https://addons.community
|
|
||||||
topics: prometheus, addon, addons, home-assistant, homeassistant
|
|
||||||
private: false
|
|
||||||
has_issues: true
|
|
||||||
has_projects: false
|
|
||||||
has_wiki: false
|
|
||||||
has_downloads: false
|
|
||||||
default_branch: master
|
|
||||||
allow_squash_merge: true
|
|
||||||
allow_merge_commit: false
|
|
||||||
allow_rebase_merge: true
|
|
||||||
labels:
|
|
||||||
# Priority labels
|
|
||||||
- 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..."
|
|
||||||
|
|
||||||
# Type labels
|
|
||||||
- name: "Type: Bug"
|
|
||||||
color: ee0701
|
|
||||||
description: "Inconsistencies or issues which will cause a problem for users or implementors."
|
|
||||||
- name: "Type: Documentation"
|
|
||||||
color: 0052cc
|
|
||||||
description: "Solely about the documentation of the project."
|
|
||||||
- name: "Type: Enhancement"
|
|
||||||
color: 1d76db
|
|
||||||
description: "Enhancement of the code, not introducing new features."
|
|
||||||
- name: "Type: Feature"
|
|
||||||
color: 0e8a16
|
|
||||||
description: "New features or options."
|
|
||||||
- name: "Type: Support"
|
|
||||||
color: 5319e7
|
|
||||||
description: "Marks an issue as a support ticket."
|
|
||||||
- name: "Type: Discussion"
|
|
||||||
color: d4c5f9
|
|
||||||
description: "Marks an issue as a generic discussion ticket."
|
|
||||||
- name: "Type: Maintenance"
|
|
||||||
color: 2af79e
|
|
||||||
description: "Generic maintenance tasks, e.g., package updates."
|
|
||||||
|
|
||||||
# Additional markers
|
|
||||||
- name: "Security"
|
|
||||||
color: ee0701
|
|
||||||
description: "Marks a security issue that needs to be resolved asap."
|
|
||||||
- name: "Idea"
|
|
||||||
color: fef2c0
|
|
||||||
description: "Marks an idea, which might be excepted and implemented."
|
|
||||||
- name: "Incomplete"
|
|
||||||
color: fef2c0
|
|
||||||
description: "Marks a PR or issue that is missing information."
|
|
||||||
- name: "Pull request"
|
|
||||||
color: fbca04
|
|
||||||
description: "There is an PR opened for this issue."
|
|
||||||
- name: "Accepted"
|
|
||||||
color: c2e0c6
|
|
||||||
description: "This issue or PR has been accepted."
|
|
||||||
- name: "Declined"
|
|
||||||
color: f9d0c4
|
|
||||||
description: "This issue or PR has been declined."
|
|
||||||
- name: "Potential duplicate"
|
|
||||||
color: e6e6e6
|
|
||||||
description: "This issue has been automatically marked as a potential duplicate."
|
|
||||||
|
|
||||||
# Ongoing Status labels
|
|
||||||
- name: "Status: Triage"
|
|
||||||
color: fbca04
|
|
||||||
description: "This issue needs to be triaged."
|
|
||||||
- name: "Status: On hold"
|
|
||||||
color: cccccc
|
|
||||||
description: "Issue or PR that has been placed on hold for now."
|
|
||||||
- name: "Status: In progress"
|
|
||||||
color: fbca04
|
|
||||||
description: "Issue is currently being resolved by a developer."
|
|
||||||
- name: "Status: Stale"
|
|
||||||
color: fef2c0
|
|
||||||
description: "There has not been activity on this issue or PR for quite some time."
|
|
||||||
- name: "Status: Awaiting response"
|
|
||||||
color: fef2c0
|
|
||||||
description: "Issue or PR awaits response from the creator."
|
|
||||||
- name: "Status: Blocked"
|
|
||||||
color: fef2c0
|
|
||||||
description: "Progress on this issue is currently not possible."
|
|
||||||
|
|
||||||
# Closing status labels
|
|
||||||
- name: "Closed: Known limitation"
|
|
||||||
color: e6e6e6
|
|
||||||
description: "Issue is closed, it is a known limitation."
|
|
||||||
- name: "Closed: Expected behavior"
|
|
||||||
color: e6e6e6
|
|
||||||
description: "Issues is closed, it is expected behavior."
|
|
||||||
- name: "Closed: Duplicate"
|
|
||||||
color: e6e6e6
|
|
||||||
description: "Issue is closed, duplicate of an existing issue."
|
|
||||||
- name: "Closed: Invalid"
|
|
||||||
color: e6e6e6
|
|
||||||
description: "Issue is closed, marked as not a valid issue (e.g., an user error)."
|
|
||||||
- name: "Closed: Wrong repository"
|
|
||||||
color: e6e6e6
|
|
||||||
description: "Issue is closed, was created in the wrong repository."
|
|
||||||
- name: "Closed: Won't Fix"
|
|
||||||
color: e6e6e6
|
|
||||||
description: "Issue is closed, it won't be fixed."
|
|
||||||
- name: "Closed: Done"
|
|
||||||
color: c2e0c6
|
|
||||||
description: "Issue closed, work on this issue has been marked complete."
|
|
||||||
|
|
||||||
# Others
|
|
||||||
- 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
|
|
||||||
|
|
||||||
branches:
|
|
||||||
- name: master
|
|
||||||
protection:
|
|
||||||
required_pull_request_reviews:
|
|
||||||
# required_approving_review_count: 1
|
|
||||||
dismiss_stale_reviews: true
|
|
||||||
require_code_owner_reviews: true
|
|
||||||
dismissal_restrictions:
|
|
||||||
users: []
|
|
||||||
teams:
|
|
||||||
- Admins
|
|
||||||
- Masters
|
|
||||||
required_status_checks:
|
|
||||||
strict: false
|
|
||||||
contexts: []
|
|
||||||
enforce_admins: false
|
|
||||||
restrictions:
|
|
||||||
users: []
|
|
||||||
teams:
|
|
||||||
- Admins
|
|
||||||
- Masters
|
|
61
.github/stale.yml
vendored
61
.github/stale.yml
vendored
|
@ -1,61 +0,0 @@
|
||||||
---
|
|
||||||
# Configuration for probot-stale - https://github.com/probot/stale
|
|
||||||
|
|
||||||
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
|
||||||
daysUntilStale: 60
|
|
||||||
|
|
||||||
# Number of days of inactivity before a stale Issue or Pull Request is closed.
|
|
||||||
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
|
|
||||||
daysUntilClose: 7
|
|
||||||
|
|
||||||
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
|
|
||||||
exemptLabels:
|
|
||||||
- "Status: On hold"
|
|
||||||
- "Status: In progress"
|
|
||||||
- "Status: Awaiting response"
|
|
||||||
- "Status: Blocked"
|
|
||||||
- "Idea"
|
|
||||||
- "Security"
|
|
||||||
|
|
||||||
# Set to true to ignore issues in a project (defaults to false)
|
|
||||||
exemptProjects: false
|
|
||||||
|
|
||||||
# Set to true to ignore issues in a milestone (defaults to false)
|
|
||||||
exemptMilestones: false
|
|
||||||
|
|
||||||
# Label to use when marking as stale
|
|
||||||
staleLabel: "Status: Stale"
|
|
||||||
|
|
||||||
# Comment to post when marking as stale. Set to `false` to disable
|
|
||||||
markComment: >
|
|
||||||
This issue has been automatically marked as stale because it has not had
|
|
||||||
recent activity. It will be closed if no further activity occurs. Thank you
|
|
||||||
for your contributions.
|
|
||||||
|
|
||||||
# Comment to post when removing the stale label.
|
|
||||||
# unmarkComment: >
|
|
||||||
# Your comment here.
|
|
||||||
unmarkComment: false
|
|
||||||
|
|
||||||
# Comment to post when closing a stale Issue or Pull Request.
|
|
||||||
# closeComment: >
|
|
||||||
# Your comment here.
|
|
||||||
closeComment: false
|
|
||||||
|
|
||||||
# Limit the number of actions per hour, from 1-30. Default is 30
|
|
||||||
limitPerRun: 30
|
|
||||||
|
|
||||||
# Limit to only `issues` or `pulls`
|
|
||||||
only: issues
|
|
||||||
|
|
||||||
# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
|
|
||||||
# pulls:
|
|
||||||
# daysUntilStale: 30
|
|
||||||
# markComment: >
|
|
||||||
# This pull request has been automatically marked as stale because it has not had
|
|
||||||
# recent activity. It will be closed if no further activity occurs. Thank you
|
|
||||||
# for your contributions.
|
|
||||||
|
|
||||||
# issues:
|
|
||||||
# exemptLabels:
|
|
||||||
# - confirmed
|
|
22
.github/support.yml
vendored
22
.github/support.yml
vendored
|
@ -1,22 +0,0 @@
|
||||||
---
|
|
||||||
# Configuration for support-requests - https://github.com/dessant/support-requests
|
|
||||||
|
|
||||||
# Label used to mark issues as support requests
|
|
||||||
supportLabel: "Type: Support"
|
|
||||||
|
|
||||||
# Comment to post on issues marked as support requests. Add a link
|
|
||||||
# to a support page, or set to `false` to disable
|
|
||||||
supportComment: >
|
|
||||||
:wave: We use the issue tracker exclusively for bug reports and feature requests.
|
|
||||||
However, this issue appears to be a support request. Please use our
|
|
||||||
support channels to get help with the project.
|
|
||||||
|
|
||||||
Head over to the
|
|
||||||
[Home Assistant community forum](https://community.home-assistant.io/)
|
|
||||||
or join our [Discord](https://discord.me/hassioaddons) chat.
|
|
||||||
|
|
||||||
# Close issues marked as support requests
|
|
||||||
close: true
|
|
||||||
|
|
||||||
# Lock issues marked as support requests
|
|
||||||
lock: false
|
|
205
.github/workflows/ci.yaml
vendored
Normal file
205
.github/workflows/ci.yaml
vendored
Normal file
|
@ -0,0 +1,205 @@
|
||||||
|
---
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- reopened
|
||||||
|
- synchronize
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
information:
|
||||||
|
name: Gather add-on information
|
||||||
|
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.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/hassio-addons/${{ 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
|
260
.github/workflows/deploy.yaml
vendored
Normal file
260
.github/workflows/deploy.yaml
vendored
Normal file
|
@ -0,0 +1,260 @@
|
||||||
|
---
|
||||||
|
name: Deploy
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- published
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["CI"]
|
||||||
|
branches: [main]
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
information:
|
||||||
|
if: |
|
||||||
|
github.event_name == 'release'
|
||||||
|
|| (
|
||||||
|
github.event_name == 'workflow_run'
|
||||||
|
&& github.event.workflow_run.conclusion == 'success'
|
||||||
|
)
|
||||||
|
name: ℹ️ Gather add-on information
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
architectures: ${{ steps.information.outputs.architectures }}
|
||||||
|
build: ${{ steps.information.outputs.build }}
|
||||||
|
description: ${{ steps.information.outputs.description }}
|
||||||
|
environment: ${{ steps.release.outputs.environment }}
|
||||||
|
name: ${{ steps.information.outputs.name }}
|
||||||
|
slug: ${{ steps.information.outputs.slug }}
|
||||||
|
target: ${{ steps.information.outputs.target }}
|
||||||
|
version: ${{ steps.release.outputs.version }}
|
||||||
|
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.2
|
||||||
|
- name: ℹ️ Gather version and environment
|
||||||
|
id: release
|
||||||
|
run: |
|
||||||
|
sha="${{ github.sha }}"
|
||||||
|
environment="edge"
|
||||||
|
version="${sha:0:7}"
|
||||||
|
if [[ "${{ github.event_name }}" = "release" ]]; then
|
||||||
|
version="${{ github.event.release.tag_name }}"
|
||||||
|
version="${version,,}"
|
||||||
|
version="${version#v}"
|
||||||
|
environment="stable"
|
||||||
|
if [[ "${{ github.event.release.prerelease }}" = "true" ]]; then
|
||||||
|
environment="beta"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "::set-output name=environment::${environment}"
|
||||||
|
echo "::set-output name=version::${version}"
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
name: 👷 Build & Deploy ${{ matrix.architecture }}
|
||||||
|
needs: information
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
architecture: ${{ fromJson(needs.information.outputs.architectures) }}
|
||||||
|
steps:
|
||||||
|
- name: 🔂 Wait for other runs to complete
|
||||||
|
uses: softprops/turnstyle@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- 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: 🏗 Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v1.10.0
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- 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:
|
||||||
|
load: true
|
||||||
|
# yamllint disable rule:line-length
|
||||||
|
tags: |
|
||||||
|
ghcr.io/hassio-addons/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.environment }}
|
||||||
|
ghcr.io/hassio-addons/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.version }}
|
||||||
|
# yamllint enable rule:line-length
|
||||||
|
context: ${{ needs.information.outputs.target }}
|
||||||
|
file: ${{ needs.information.outputs.target }}/Dockerfile
|
||||||
|
cache-from: |
|
||||||
|
type=local,src=/tmp/.docker-cache
|
||||||
|
ghcr.io/hassio-addons/${{ 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=${{ needs.information.outputs.version }}
|
||||||
|
# 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
|
||||||
|
- name: 🔏 Notarize
|
||||||
|
# yamllint disable rule:line-length
|
||||||
|
run: |
|
||||||
|
if vcn authenticate \
|
||||||
|
--output json \
|
||||||
|
"docker://ghcr.io/hassio-addons/${{ 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/hassio-addons/${{ 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
|
||||||
|
# yamllint disable rule:line-length
|
||||||
|
run: |
|
||||||
|
docker push \
|
||||||
|
"ghcr.io/hassio-addons/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.environment }}"
|
||||||
|
docker push \
|
||||||
|
"ghcr.io/hassio-addons/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:${{ needs.information.outputs.version }}"
|
||||||
|
|
||||||
|
publish-edge:
|
||||||
|
name: 📢 Publish to edge repository
|
||||||
|
if: needs.information.outputs.environment == 'edge'
|
||||||
|
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@v1.1.3
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.DISPATCH_TOKEN }}
|
||||||
|
repository: hassio-addons/repository-edge
|
||||||
|
event-type: update
|
||||||
|
client-payload: >
|
||||||
|
{
|
||||||
|
"addon": "${{ needs.information.outputs.slug }}",
|
||||||
|
"name": "${{ needs.information.outputs.name }}",
|
||||||
|
"repository": "${{ github.repository }}",
|
||||||
|
"version": "${{ needs.information.outputs.version }}"
|
||||||
|
}
|
||||||
|
|
||||||
|
publish-beta:
|
||||||
|
name: 📢 Publish to beta repository
|
||||||
|
if: |
|
||||||
|
needs.information.outputs.environment == 'beta' ||
|
||||||
|
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@v1.1.3
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.DISPATCH_TOKEN }}
|
||||||
|
repository: hassio-addons/repository-beta
|
||||||
|
event-type: update
|
||||||
|
client-payload: >
|
||||||
|
{
|
||||||
|
"addon": "${{ needs.information.outputs.slug }}",
|
||||||
|
"name": "${{ needs.information.outputs.name }}",
|
||||||
|
"repository": "${{ github.repository }}",
|
||||||
|
"version": "${{ github.event.release.tag_name }}"
|
||||||
|
}
|
||||||
|
|
||||||
|
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@v1.1.3
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.DISPATCH_TOKEN }}
|
||||||
|
repository: hassio-addons/repository
|
||||||
|
event-type: update
|
||||||
|
client-payload: >
|
||||||
|
{
|
||||||
|
"addon": "${{ needs.information.outputs.slug }}",
|
||||||
|
"name": "${{ needs.information.outputs.name }}",
|
||||||
|
"repository": "${{ github.repository }}",
|
||||||
|
"version": "${{ github.event.release.tag_name }}"
|
||||||
|
}
|
22
.github/workflows/labels.yaml
vendored
Normal file
22
.github/workflows/labels.yaml
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
name: Sync labels
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- .github/labels.yml
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
labels:
|
||||||
|
name: ♻️ Sync labels
|
||||||
|
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 }}
|
21
.github/workflows/lock.yaml
vendored
Normal file
21
.github/workflows/lock.yaml
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
name: Lock
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 9 * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lock:
|
||||||
|
name: 🔒 Lock closed issues and PRs
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: dessant/lock-threads@v2.1.1
|
||||||
|
with:
|
||||||
|
github-token: ${{ github.token }}
|
||||||
|
issue-lock-inactive-days: "30"
|
||||||
|
issue-lock-reason: ""
|
||||||
|
pr-lock-inactive-days: "1"
|
||||||
|
pr-lock-reason: ""
|
22
.github/workflows/pr-labels.yaml
vendored
Normal file
22
.github/workflows/pr-labels.yaml
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
name: PR Labels
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, labeled, unlabeled, synchronize]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
pr_labels:
|
||||||
|
name: Verify
|
||||||
|
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
|
18
.github/workflows/release-drafter.yaml
vendored
Normal file
18
.github/workflows/release-drafter.yaml
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
name: Release Drafter
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update_release_draft:
|
||||||
|
name: ✏️ Draft release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: 🚀 Run Release Drafter
|
||||||
|
uses: release-drafter/release-drafter@v5.15.0
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
40
.github/workflows/stale.yaml
vendored
Normal file
40
.github/workflows/stale.yaml
vendored
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
name: Stale
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 8 * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
name: 🧹 Clean up stale issues and PRs
|
||||||
|
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,14 +0,0 @@
|
||||||
---
|
|
||||||
include: https://raw.githubusercontent.com/hassio-addons/organization/master/gitlabci/addon.yml
|
|
||||||
|
|
||||||
variables:
|
|
||||||
ADDON_GITHUB_REPO: "hassio-addons/addon-prometheus"
|
|
||||||
ADDON_SLUG: "prometheus"
|
|
||||||
ADDON_TARGET: "prometheus"
|
|
||||||
|
|
||||||
ADDON_ARMHF: "false"
|
|
||||||
ADDON_I386: "false"
|
|
||||||
|
|
||||||
ADDON_AARCH64_BASE: "hassioaddons/base-aarch64:8.0.1"
|
|
||||||
ADDON_AMD64_BASE: "hassioaddons/base-amd64:8.0.1"
|
|
||||||
ADDON_ARMV7_BASE: "hassioaddons/base-armv7:8.0.1"
|
|
|
@ -1,74 +0,0 @@
|
||||||
# Code of conduct
|
|
||||||
|
|
||||||
## Our pledge
|
|
||||||
|
|
||||||
In the interest of fostering an open and welcoming environment, we as
|
|
||||||
contributors and maintainers pledge to making participation in our project and
|
|
||||||
our community a harassment-free experience for everyone, regardless of age, body
|
|
||||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
|
||||||
nationality, personal appearance, race, religion, or sexual identity and
|
|
||||||
orientation.
|
|
||||||
|
|
||||||
## Our standards
|
|
||||||
|
|
||||||
Examples of behavior that contributes to creating a positive environment
|
|
||||||
include:
|
|
||||||
|
|
||||||
- Using welcoming and inclusive language
|
|
||||||
- Being respectful of differing viewpoints and experiences
|
|
||||||
- Gracefully accepting constructive criticism
|
|
||||||
- Focusing on what is best for the community
|
|
||||||
- Showing empathy towards other community members
|
|
||||||
|
|
||||||
Examples of unacceptable behavior by participants include:
|
|
||||||
|
|
||||||
- The use of sexualized language or imagery and unwelcome sexual attention
|
|
||||||
or advances
|
|
||||||
- Trolling, insulting/derogatory comments, and personal or political attacks
|
|
||||||
- Public or private harassment
|
|
||||||
- Publishing others' private information, such as a physical or
|
|
||||||
electronic address, without explicit permission
|
|
||||||
- Other conduct which could reasonably be considered inappropriate
|
|
||||||
in a professional setting
|
|
||||||
|
|
||||||
## Our responsibilities
|
|
||||||
|
|
||||||
Project maintainers are responsible for clarifying the standards of acceptable
|
|
||||||
behavior and are expected to take appropriate and fair corrective action in
|
|
||||||
response to any instances of unacceptable behavior.
|
|
||||||
|
|
||||||
Project maintainers 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, or to ban temporarily or
|
|
||||||
permanently any contributor for other behaviors that they deem inappropriate,
|
|
||||||
threatening, offensive, or harmful.
|
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
This Code of Conduct applies both within project spaces and in public spaces
|
|
||||||
when an individual is representing the project or its community. Examples of
|
|
||||||
representing a project or community include using an official project e-mail
|
|
||||||
address, posting via an official social media account, or acting as an appointed
|
|
||||||
representative at an online or offline event. Representation of a project may be
|
|
||||||
further defined and clarified by project maintainers.
|
|
||||||
|
|
||||||
## Enforcement
|
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
||||||
reported by contacting the project lead at frenck@addons.community. All
|
|
||||||
complaints will be reviewed and investigated and will result in a response that
|
|
||||||
is deemed necessary and appropriate to the circumstances. The project lead is
|
|
||||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
|
||||||
Further details of specific enforcement policies may be posted separately.
|
|
||||||
|
|
||||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
|
||||||
faith may face temporary or permanent repercussions as determined by other
|
|
||||||
members of the project's leadership.
|
|
||||||
|
|
||||||
## Attribution
|
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
||||||
version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
|
||||||
|
|
||||||
[homepage]: http://contributor-covenant.org
|
|
||||||
[version]: http://contributor-covenant.org/version/1/4/
|
|
|
@ -48,7 +48,7 @@ This is an active open-source project. We are always open to people who want to
|
||||||
use the code or contribute to it.
|
use the code or contribute to it.
|
||||||
|
|
||||||
We have set up a separate document containing our
|
We have set up a separate document containing our
|
||||||
[contribution guidelines](CONTRIBUTING.md).
|
[contribution guidelines](.github/CONTRIBUTING.md).
|
||||||
|
|
||||||
Thank you for being involved! :heart_eyes:
|
Thank you for being involved! :heart_eyes:
|
||||||
|
|
||||||
|
|
|
@ -25,13 +25,13 @@ Example:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
---
|
---
|
||||||
job_name: 'octoprint'
|
job_name: "octoprint"
|
||||||
scrape_interval: 5s
|
scrape_interval: 5s
|
||||||
metrics_path: '/plugin/prometheus_exporter/metrics'
|
metrics_path: "/plugin/prometheus_exporter/metrics"
|
||||||
params:
|
params:
|
||||||
apikey: ['VERYSECRETAPIKEY']
|
apikey: ["VERYSECRETAPIKEY"]
|
||||||
static_configs:
|
static_configs:
|
||||||
- targets: ['octoprint.example.org:5000']
|
- targets: ["octoprint.example.org:5000"]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
||||||
|
@ -64,16 +64,15 @@ For stable this is `http://a0d7b954-prometheus:9090`
|
||||||
## Changelog & Releases
|
## Changelog & Releases
|
||||||
|
|
||||||
This repository keeps a change log using [GitHub's releases][releases]
|
This repository keeps a change log using [GitHub's releases][releases]
|
||||||
functionality. The format of the log is based on
|
functionality.
|
||||||
[Keep a Changelog][keepchangelog].
|
|
||||||
|
|
||||||
Releases are based on [Semantic Versioning][semver], and use the format
|
Releases are based on [Semantic Versioning][semver], and use the format
|
||||||
of ``MAJOR.MINOR.PATCH``. In a nutshell, the version will be incremented
|
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||||
based on the following:
|
based on the following:
|
||||||
|
|
||||||
- ``MAJOR``: Incompatible or major changes.
|
- `MAJOR`: Incompatible or major changes.
|
||||||
- ``MINOR``: Backwards-compatible new features and enhancements.
|
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||||
- ``PATCH``: Backwards-compatible bugfixes and package updates.
|
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
|
@ -127,7 +126,6 @@ SOFTWARE.
|
||||||
[forum]: https://example.net
|
[forum]: https://example.net
|
||||||
[mjrider]: https://github.com/mjrider
|
[mjrider]: https://github.com/mjrider
|
||||||
[issue]: https://github.com/hassio-addons/addon-prometheus/issues
|
[issue]: https://github.com/hassio-addons/addon-prometheus/issues
|
||||||
[keepchangelog]: http://keepachangelog.com/en/1.0.0/
|
|
||||||
[reddit]: https://reddit.com/r/homeassistant
|
[reddit]: https://reddit.com/r/homeassistant
|
||||||
[releases]: https://github.com/hassio-addons/addon-prometheus/releases
|
[releases]: https://github.com/hassio-addons/addon-prometheus/releases
|
||||||
[semver]: http://semver.org/spec/v2.0.0.htm
|
[semver]: http://semver.org/spec/v2.0.0.htm
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue