Compare commits
2 Commits
1.0.0
...
app-legacy
| Author | SHA1 | Date | |
|---|---|---|---|
| ea543a1353 | |||
| 03025c13fd |
23
.all-contributorsrc
Executable file → Normal file
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"projectName": "tvapp2",
|
"projectName": "thetvapp-docker",
|
||||||
"projectOwner": "Aetherinox",
|
"projectOwner": "Aetherinox",
|
||||||
"repoType": "github",
|
"repoType": "github",
|
||||||
"repoHost": "https://github.com",
|
"repoHost": "https://github.com",
|
||||||
@@ -12,22 +12,15 @@
|
|||||||
"login": "Aetherinox",
|
"login": "Aetherinox",
|
||||||
"name": "Aetherinox",
|
"name": "Aetherinox",
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/118329232?v=4",
|
"avatar_url": "https://avatars.githubusercontent.com/u/118329232?v=4",
|
||||||
"profile": "https://github.com/Aetherinox",
|
"profile": "https://gitlab.com/Aetherinox",
|
||||||
"contributions": ["code"]
|
"contributions": ["code", "projectManagement"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "iFlip721",
|
"login": "dtankdempse",
|
||||||
"name": "iFlip721",
|
"name": "dtankdempse",
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/28721588?v=4",
|
"avatar_url": "https://avatars.githubusercontent.com/u/175421607?v=4",
|
||||||
"profile": "https://github.com/iFlip721",
|
"profile": "https://gitlab.com/dtankdempse",
|
||||||
"contributions": ["code"]
|
"contributions": ["tools"]
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "Optx",
|
|
||||||
"name": "Optx",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/32874812?v=4",
|
|
||||||
"profile": "https://github.com/Nvmdfth",
|
|
||||||
"contributions": ["code"]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"contributorsPerLine": 7,
|
"contributorsPerLine": 7,
|
||||||
|
|||||||
6
.dockerignore
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.github
|
||||||
|
.gitattributes
|
||||||
|
READMETEMPLATE.md
|
||||||
|
README.md
|
||||||
27
.editorconfig
Executable file → Normal file
@@ -1,20 +1,9 @@
|
|||||||
# #
|
# http://editorconfig.org
|
||||||
# @file .editorconfig
|
|
||||||
# @author Aetherinox https://github.com/Aetherinox
|
|
||||||
# https://git.binaryninja.net/Aetherinox
|
|
||||||
# @ref http://editorconfig.org
|
|
||||||
# #
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Is top-most EditorConfig file
|
|
||||||
# #
|
|
||||||
|
|
||||||
|
# is top-most EditorConfig file
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
# #
|
# All Files
|
||||||
# All Files
|
|
||||||
# #
|
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
@@ -23,17 +12,11 @@ charset = utf-8
|
|||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
# #
|
# Markdown Files
|
||||||
# Markdown Files
|
|
||||||
# #
|
|
||||||
|
|
||||||
[*.md]
|
[*.md]
|
||||||
trim_trailing_whitespace = false
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
# #
|
# Other
|
||||||
# Other
|
|
||||||
# #
|
|
||||||
|
|
||||||
[{*.nsh,*.yml,*.yaml,*.json}]
|
[{*.nsh,*.yml,*.yaml,*.json}]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|||||||
41
.gitattributes
vendored
Executable file → Normal file
@@ -1,32 +1,17 @@
|
|||||||
# #
|
# Auto detect text files and perform LF normalization
|
||||||
# @file .gitattritutes
|
|
||||||
# @author Aetherinox https://github.com/Aetherinox
|
|
||||||
# https://git.binaryninja.net/Aetherinox
|
|
||||||
# #
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Auto detect text files and set LF
|
|
||||||
# #
|
|
||||||
|
|
||||||
* text=auto
|
* text=auto
|
||||||
|
|
||||||
# #
|
# Custom for Visual Studio
|
||||||
# Visual Studio
|
|
||||||
# #
|
|
||||||
|
|
||||||
*.cs diff=csharp
|
*.cs diff=csharp
|
||||||
|
|
||||||
# #
|
# Standard to msysgit
|
||||||
# msysgit
|
*.doc diff=astextplain
|
||||||
# #
|
*.DOC diff=astextplain
|
||||||
|
*.docx diff=astextplain
|
||||||
*.doc diff=astextplain
|
*.DOCX diff=astextplain
|
||||||
*.DOC diff=astextplain
|
*.dot diff=astextplain
|
||||||
*.docx diff=astextplain
|
*.DOT diff=astextplain
|
||||||
*.DOCX diff=astextplain
|
*.pdf diff=astextplain
|
||||||
*.dot diff=astextplain
|
*.PDF diff=astextplain
|
||||||
*.DOT diff=astextplain
|
*.rtf diff=astextplain
|
||||||
*.pdf diff=astextplain
|
*.RTF diff=astextplain
|
||||||
*.PDF diff=astextplain
|
|
||||||
*.rtf diff=astextplain
|
|
||||||
*.RTF diff=astextplain
|
|
||||||
|
|||||||
10
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
custom: ["https://buymeacoffee.com/aetherinox"]
|
||||||
|
github: # [repo-name, aetherinox]
|
||||||
|
patreon: # Replace with a single Patreon username
|
||||||
|
open_collective: # name
|
||||||
|
ko_fi: # Replace with a single Ko-fi username
|
||||||
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
|
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||||
|
liberapay: # Replace with a single Liberapay username
|
||||||
|
issuehunt: # Replace with a single IssueHunt username
|
||||||
|
otechie: # Replace with a single Otechie username
|
||||||
58
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@@ -10,10 +10,8 @@ body:
|
|||||||
value: |
|
value: |
|
||||||
1. Please speak `English`.
|
1. Please speak `English`.
|
||||||
2. Make sure you are using the latest version and take a moment to check that your issue hasn't been reported before.
|
2. Make sure you are using the latest version and take a moment to check that your issue hasn't been reported before.
|
||||||
3. It's really important to provide pertinent details and logs, incomplete details will be handled as an invalid report.
|
3. It's really important to provide pertinent details and logs,
|
||||||
4. Before creating this bug report, ensure you updated your applications to the latest versions.
|
incomplete details will be handled as an invalid report.
|
||||||
Check your configurations to ensure there are no typos or errors.
|
|
||||||
Docker users should attempt to re-pull the TVApp2 image to ensure caching is not the cause of an issue.
|
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
@@ -41,12 +39,11 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
|
|
||||||
- type: input
|
- type: input
|
||||||
id: version-tvapp2
|
id: version-thetvapp
|
||||||
attributes:
|
attributes:
|
||||||
label: "Version - Tag"
|
label: "Version - Tag"
|
||||||
description: |
|
description: |
|
||||||
Version / tag you are pulling for `TVApp2`.
|
Version / tag you are pulling for `thetvapp`
|
||||||
You can view your build version in terminal by typing `docker inspect tvapp2 | grep BUILDVERSION`
|
|
||||||
placeholder: "Ex: 1.0.0"
|
placeholder: "Ex: 1.0.0"
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
@@ -61,50 +58,15 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
|
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
id: image-registry
|
id: image-source
|
||||||
attributes:
|
attributes:
|
||||||
label: Docker Image Registry
|
label: Docker Image Source
|
||||||
description: |
|
description: |
|
||||||
Select which docker image you are pulling from.
|
Select which docker image you are pulling from
|
||||||
If you custom built your image, ensure it's not a problem with your code before submitting this bug report.
|
|
||||||
options:
|
options:
|
||||||
- "Dockerhub"
|
|
||||||
- "Gitea"
|
|
||||||
- "Github"
|
- "Github"
|
||||||
- "Manual Build"
|
- "Dockerhub"
|
||||||
validations:
|
- "Custom Built"
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: app-parent
|
|
||||||
attributes:
|
|
||||||
label: Parent App
|
|
||||||
description: |
|
|
||||||
Select the application you are using TVApp2 with. Jellyfin, Plex, Emby, etc.
|
|
||||||
options:
|
|
||||||
- "Dim"
|
|
||||||
- "Emby"
|
|
||||||
- "Jellyfin"
|
|
||||||
- "KODI"
|
|
||||||
- "Plex"
|
|
||||||
- "Other (specify in description)"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: app-proxy
|
|
||||||
attributes:
|
|
||||||
label: Proxy App
|
|
||||||
description: |
|
|
||||||
Select the plugin / app (if any) you are using as a m3u "Proxy" between your parent streaming app and TVApp2.
|
|
||||||
options:
|
|
||||||
- "❌ No Proxy"
|
|
||||||
- "Cabernet"
|
|
||||||
- "IPTVBoss"
|
|
||||||
- "IPTV-Solution"
|
|
||||||
- "Threadfin"
|
|
||||||
- "xTeVe"
|
|
||||||
- "Other (specify in description)"
|
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
@@ -136,7 +98,7 @@ body:
|
|||||||
label: Logs
|
label: Logs
|
||||||
description: |
|
description: |
|
||||||
Paste your docker logs here.
|
Paste your docker logs here.
|
||||||
You can get your docker logs by opening terminal and running `docker logs tvapp2`
|
Paste logs from inside mounted volume `/config/log/*`
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: screenshots
|
id: screenshots
|
||||||
|
|||||||
1
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1 +0,0 @@
|
|||||||
blank_issues_enabled: true
|
|
||||||
69
.github/ISSUE_TEMPLATE/roadmap.yml
vendored
@@ -1,69 +0,0 @@
|
|||||||
name: "🗺️ Roadmap"
|
|
||||||
description: Planned projects in the future to do. (⚠️ For contributors only)
|
|
||||||
title: "🗺️ Roadmap: <title>"
|
|
||||||
labels: [
|
|
||||||
"Type ◦ Roadmap"
|
|
||||||
]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
1. This issue type is different from feature requests.
|
|
||||||
2. This issue type is typically used by the developers of this repository to create and track new features
|
|
||||||
that have been planned in a future version of TVApp2.
|
|
||||||
3. Only use this issue type if you have been instructed to do so by a repository contributor.
|
|
||||||
4. Describe the benefits of this plan, and what needs to be taken into consideration during implementation.
|
|
||||||
5. Be detailed but to the point.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
- type: input
|
|
||||||
id: roadmap-version-target
|
|
||||||
attributes:
|
|
||||||
label: Target Version
|
|
||||||
description: |
|
|
||||||
Which version are we aiming to introduce this into TVApp2?
|
|
||||||
placeholder: "v1.0.0"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: roadmap-category
|
|
||||||
attributes:
|
|
||||||
label: Category
|
|
||||||
description: |
|
|
||||||
Select which aspect of TVApp2 this roadmap is designed for.
|
|
||||||
options:
|
|
||||||
- API
|
|
||||||
- Build Process
|
|
||||||
- CI (Continuous integration)
|
|
||||||
- Dependency / NodeJS Package
|
|
||||||
- Distribution
|
|
||||||
- Documentation
|
|
||||||
- M3U / EPG Functionality
|
|
||||||
- Repository
|
|
||||||
- S6-Overlay
|
|
||||||
default: 0
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: roadmap-details
|
|
||||||
attributes:
|
|
||||||
label: Roadmap Details
|
|
||||||
description: |
|
|
||||||
Explain the vital steps in a bullet-point breakdown
|
|
||||||
placeholder: |
|
|
||||||
- Requires package update
|
|
||||||
- Must first integrate item A
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: roadmap-screenshots
|
|
||||||
attributes:
|
|
||||||
label: 'Additional Info / Examples / Screenshots'
|
|
||||||
description: |
|
|
||||||
If available, provide mockups or examples.
|
|
||||||
Any further details you want to add.
|
|
||||||
Example snippets of code.
|
|
||||||
9
.github/PULL_REQUEST_TEMPLATE.md
vendored
Executable file → Normal file
@@ -7,16 +7,15 @@
|
|||||||
This text will remain hidden when you submit your pull request.
|
This text will remain hidden when you submit your pull request.
|
||||||
|
|
||||||
For your pull request title, use the format:
|
For your pull request title, use the format:
|
||||||
[BUG]: Brief title of the bug being fixed
|
[BUG]: Brief title of the bug being fixed
|
||||||
[FEATURE]: Brief title of the feature being added
|
[FEATURE]: Brief title of the feature being added
|
||||||
[DOCS]: Brief title of the feature being added
|
|
||||||
|
|
||||||
Failure to follow the above title format will result in your PR being ignored.
|
Failure to follow the above title format will result in your PR being ignored.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
# Pull Request
|
# Pull Request
|
||||||
<small>Select which topic best describes your contribution:</small>
|
<small>Checkmark which topic best describes your contribution:</small>
|
||||||
|
|
||||||
- [ ] Feature
|
- [ ] Feature
|
||||||
- [ ] Bug
|
- [ ] Bug
|
||||||
@@ -44,7 +43,7 @@
|
|||||||
### Before You Submit
|
### Before You Submit
|
||||||
<small>Please ensure you check the following items to indicate that you've read this section and completed each task</small>
|
<small>Please ensure you check the following items to indicate that you've read this section and completed each task</small>
|
||||||
|
|
||||||
- [ ] My code follows the [Contribution Guidelines](https://github.com/TheBinaryNinja/tvapp2/blob/main/CONTRIBUTING.md)
|
- [ ] My code follows the [Contribution Guidelines](https://github.com/Aetherinox/thetvapp-docker/blob/main/CONTRIBUTING.md)
|
||||||
- [ ] I give expressed consent for my work to be used in this repo
|
- [ ] I give expressed consent for my work to be used in this repo
|
||||||
- [ ] I have tested my work and it functions as intended
|
- [ ] I have tested my work and it functions as intended
|
||||||
- [ ] I have included documentation if the change requires such
|
- [ ] I have included documentation if the change requires such
|
||||||
|
|||||||
0
.github/changelog-configuration.json
vendored
Executable file → Normal file
2
.github/dependabot.yml
vendored
Executable file → Normal file
@@ -1,7 +1,7 @@
|
|||||||
# #
|
# #
|
||||||
# MIT License
|
# MIT License
|
||||||
#
|
#
|
||||||
# Copyright (c) 2024-2025 Aetherinox
|
# Copyright (c) 2025 Aetherinox
|
||||||
#
|
#
|
||||||
# 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
|
||||||
|
|||||||
26
.github/labeler.yml
vendored
Executable file → Normal file
@@ -1,27 +1,3 @@
|
|||||||
# #
|
|
||||||
# MIT License
|
|
||||||
#
|
|
||||||
# Copyright (c) 2024-2025 Aetherinox
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
|
||||||
# in the Software without restriction, including without limitation the rights
|
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in all
|
|
||||||
# copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
# SOFTWARE.
|
|
||||||
# #
|
|
||||||
|
|
||||||
# Number of labels to fetch (optional). Defaults to 100
|
# Number of labels to fetch (optional). Defaults to 100
|
||||||
numLabels: 40
|
numLabels: 40
|
||||||
# These labels will not be used even if the issue contains them (optional).
|
# These labels will not be used even if the issue contains them (optional).
|
||||||
@@ -66,4 +42,4 @@ custom:
|
|||||||
keywords:
|
keywords:
|
||||||
- '[request]'
|
- '[request]'
|
||||||
labels:
|
labels:
|
||||||
- Type ◦ Feature
|
- Type ◦ Feature
|
||||||
165
.github/workflows/deploy-clean.yml
vendored
Executable file → Normal file
@@ -1,15 +1,8 @@
|
|||||||
# #
|
# #
|
||||||
# @type github workflow
|
# @type github workflow
|
||||||
# @desc cleans up the list of deployments in the environment history
|
# @desc cleans up the list of deployments in the environment history
|
||||||
# edit the 'environment:' to determine which deployment to keep clean
|
|
||||||
# - can be ran manually
|
|
||||||
# @author Aetherinox
|
# @author Aetherinox
|
||||||
# @url https://github.com/Aetherinox
|
# @url https://github.com/Aetherinox
|
||||||
#
|
|
||||||
# @secrets secrets.SELF_TOKEN_CL Github Access Token (Classic)
|
|
||||||
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_WORKfLOWS Discord Webbhook URL; right-click on channel, click "Integrations"
|
|
||||||
# #
|
|
||||||
|
|
||||||
# #
|
# #
|
||||||
|
|
||||||
name: "⚙️ Deploy › Clean"
|
name: "⚙️ Deploy › Clean"
|
||||||
@@ -21,40 +14,15 @@ run-name: "⚙️ Deploy › Clean"
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Deployment Environment Name
|
|
||||||
#
|
|
||||||
# this is the name of the deployment item
|
|
||||||
# #
|
|
||||||
|
|
||||||
DEPLOYMENT_ENV:
|
|
||||||
description: '📦 Deployment Environment'
|
|
||||||
required: true
|
|
||||||
default: 'orion'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Delay
|
|
||||||
#
|
|
||||||
# Milliseconds to wait between cleaning up each action in history. Avoids secondary rate limit. Default: 500
|
|
||||||
# #
|
|
||||||
|
|
||||||
DEPLOYMENT_DELAY:
|
|
||||||
description: '🕛 Delete Delay'
|
|
||||||
required: true
|
|
||||||
default: '1000'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# environment variables
|
# environment variables
|
||||||
# #
|
# #
|
||||||
|
|
||||||
env:
|
env:
|
||||||
DEPLOYMENT_ENV: ${{ github.event.inputs.DEPLOYMENT_ENV || 'orion' }}
|
BOT_NAME_1: AdminServ
|
||||||
DEPLOYMENT_DELAY: ${{ github.event.inputs.DEPLOYMENT_DELAY || '1000' }}
|
BOT_NAME_2: AdminServX
|
||||||
BOT_NAME_1: EuropaServ
|
BOT_NAME_3: EuropaServ
|
||||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
BOT_NAME_DEPENDABOT: dependabot[bot]
|
||||||
LABELS_JSON: |
|
LABELS_JSON: |
|
||||||
[
|
[
|
||||||
@@ -70,7 +38,7 @@ env:
|
|||||||
{ "name": "Status 𐄂 Accepted", "color": "2e7539", "description": "This pull request has been accepted" },
|
{ "name": "Status 𐄂 Accepted", "color": "2e7539", "description": "This pull request has been accepted" },
|
||||||
{ "name": "Status 𐄂 Autoclosed", "color": "3E0915", "description": "Originally stale and was autoclosed for no activity" },
|
{ "name": "Status 𐄂 Autoclosed", "color": "3E0915", "description": "Originally stale and was autoclosed for no activity" },
|
||||||
{ "name": "Status 𐄂 Denied", "color": "ba4058", "description": "Pull request has been denied" },
|
{ "name": "Status 𐄂 Denied", "color": "ba4058", "description": "Pull request has been denied" },
|
||||||
{ "name": "Status 𐄂 Locked", "color": "550F45", "description": "Automatically locked by EuropaServ for a prolonged period of inactivity" },
|
{ "name": "Status 𐄂 Locked", "color": "550F45", "description": "Automatically locked by AdminServ for a prolonged period of inactivity" },
|
||||||
{ "name": "Status 𐄂 Need Info", "color": "2E3C4C", "description": "Not enough information to resolve" },
|
{ "name": "Status 𐄂 Need Info", "color": "2E3C4C", "description": "Not enough information to resolve" },
|
||||||
{ "name": "Status 𐄂 No Action", "color": "030406", "description": "Closed without any action being taken" },
|
{ "name": "Status 𐄂 No Action", "color": "030406", "description": "Closed without any action being taken" },
|
||||||
{ "name": "Status 𐄂 Pending", "color": "984b12", "description": "Pending pull request" },
|
{ "name": "Status 𐄂 Pending", "color": "984b12", "description": "Pending pull request" },
|
||||||
@@ -124,132 +92,15 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
cleanup:
|
cleanup:
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 20
|
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
# #
|
|
||||||
# Cleanup › Set Env Variables
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Timestamp
|
|
||||||
id: task_cleanup_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Checkout › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
✅ Checkout
|
|
||||||
id: task_cleanup_gh_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Cleanup › Start
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
⚙️ Deployments › Clean
|
⚙️ Deployments › Clean
|
||||||
id: task_cleanup_start
|
|
||||||
uses: Aetherinox/delete-deploy-env-action@v3
|
uses: Aetherinox/delete-deploy-env-action@v3
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.SELF_TOKEN_CL }}
|
token: ${{ secrets.SELF_TOKEN_CL }}
|
||||||
environment: '${{ env.DEPLOYMENT_ENV }}'
|
environment: orion
|
||||||
onlyRemoveDeployments: true
|
onlyRemoveDeployments: true
|
||||||
delay: "${{ env.DEPLOYMENT_DELAY }}"
|
delay: "1000"
|
||||||
|
|
||||||
# #
|
|
||||||
# Cleanup › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Weekly Commit List
|
|
||||||
id: task_cleanup_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Cleanup › Notify Github › Success
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🔔 Send Discord Webhook Message (Success)
|
|
||||||
id: task_cleanup_notify_discord_success
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_WORKfLOWS }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Deployment Cleanup ${{ job.status == 'success' && '✅' || '❌' }}
|
|
||||||
|
|
||||||
A **successful** deployment cleanup was triggered on your repository. The history for this environment has been wiped
|
|
||||||
and will no longer list previous deployments you've made.
|
|
||||||
|
|
||||||
- Environment: `${{ env.DEPLOYMENT_ENV }}`
|
|
||||||
- Cleanup Delay: `${{ env.DEPLOYMENT_DELAY }}`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Cleanup › Notify Github › Failure
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🔔 Send Discord Webhook Message (Failure)
|
|
||||||
id: task_cleanup_notify_discord_failure
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: failure()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_WORKfLOWS }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Deployment Cleanup ${{ job.status == 'success' && '✅' || '❌' }}
|
|
||||||
|
|
||||||
A **failed** deployment cleanup was triggered on your repository. Since the action failed; no entries of your repo's
|
|
||||||
deployment history have been removed.
|
|
||||||
|
|
||||||
- Environment: `${{ env.DEPLOYMENT_ENV }}`
|
|
||||||
- Cleanup Delay: `${{ env.DEPLOYMENT_DELAY }}`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
1821
.github/workflows/deploy-docker-all.yml
vendored
724
.github/workflows/deploy-docker-dockerhub.yml
vendored
@@ -1,724 +0,0 @@
|
|||||||
# #
|
|
||||||
# @type github workflow
|
|
||||||
# @author Aetherinox
|
|
||||||
# @url https://github.com/Aetherinox
|
|
||||||
# @usage deploys docker container to Dockerhub and send message to discord
|
|
||||||
# upload this workflow to both the `main` branch of the tvapp2 repository
|
|
||||||
# @secrets secrets.ADMINSERV_GPG_KEY_ASC gpg private key (armored) | BEGIN PGP PRIVATE KEY BLOCK
|
|
||||||
# secrets.ADMINSERV_GPG_PASSPHRASE gpg private key passphrase
|
|
||||||
# secrets.ORG_BINARYNINJA_DOCKERHUB_TOKEN github personal access token (classic) with package:write permission
|
|
||||||
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES Discord webhook to report releases from github to discord
|
|
||||||
# #
|
|
||||||
|
|
||||||
name: "📦 Deploy › Docker › Dockerhub"
|
|
||||||
run-name: "📦 Deploy › Docker › Dockerhub"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Triggers
|
|
||||||
# #
|
|
||||||
|
|
||||||
on:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Trigger › Workflow Dispatch
|
|
||||||
#
|
|
||||||
# If any values are not provided, will use fallback env variable
|
|
||||||
# #
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Image Name
|
|
||||||
#
|
|
||||||
# used in dockerhub image path
|
|
||||||
# ${{ env.IMAGE_DOCKERHUB_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_NAME:
|
|
||||||
description: '📦 Image Name'
|
|
||||||
required: true
|
|
||||||
default: 'tvapp2'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Image Version
|
|
||||||
#
|
|
||||||
# used to create new release tag, and add version to docker image name
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_VERSION:
|
|
||||||
description: '🏷️ Image Version'
|
|
||||||
required: true
|
|
||||||
default: '1.0.0'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Dockerhub › Author
|
|
||||||
#
|
|
||||||
# used in dockerhub image path
|
|
||||||
# hub.docker.com/r/${{ env.IMAGE_DOCKERHUB_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_DOCKERHUB_AUTHOR:
|
|
||||||
description: '🪪 Image Author'
|
|
||||||
required: true
|
|
||||||
default: 'TheBinaryNinja'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Dockerhub › Username
|
|
||||||
#
|
|
||||||
# this is the user to sign into Dockerhub as.
|
|
||||||
# this username MUST be lowercase or you will get `unauthorized: incorrect username or password`
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_DOCKERHUB_USERNAME:
|
|
||||||
description: '🪪 Dockerhub Username'
|
|
||||||
required: true
|
|
||||||
default: 'thebinaryninja'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# true no changes to the repo will be made
|
|
||||||
# false workflow will behave normally, and push any changes detected to the files
|
|
||||||
# #
|
|
||||||
|
|
||||||
DRY_RUN:
|
|
||||||
description: '🐛 Dry Run (Debug)'
|
|
||||||
required: true
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
# #
|
|
||||||
# true released version will be marked as a development build and will have the v1.x.x-development tag instead of -latest
|
|
||||||
# false release version will be marked with -latest docker tag
|
|
||||||
# #
|
|
||||||
|
|
||||||
DEV_RELEASE:
|
|
||||||
description: '🧪 Development Release'
|
|
||||||
required: true
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Trigger › Push
|
|
||||||
# #
|
|
||||||
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- '*'
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Environment Vars
|
|
||||||
# #
|
|
||||||
|
|
||||||
env:
|
|
||||||
IMAGE_NAME: ${{ github.event.inputs.IMAGE_NAME || 'tvapp2' }}
|
|
||||||
IMAGE_VERSION: ${{ github.event.inputs.IMAGE_VERSION || '1.0.0' }}
|
|
||||||
IMAGE_DOCKERHUB_AUTHOR: ${{ github.event.inputs.IMAGE_DOCKERHUB_AUTHOR || 'thebinaryninja' }}
|
|
||||||
IMAGE_DOCKERHUB_USERNAME: ${{ github.event.inputs.IMAGE_DOCKERHUB_USERNAME || 'thebinaryninja' }}
|
|
||||||
BOT_NAME_1: EuropaServ
|
|
||||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Jobs
|
|
||||||
#
|
|
||||||
# The way pushed docker containers on Dockerhub work, the most recent image built goes at the top.
|
|
||||||
# We will use the order below which builds the :latest image last so that it appears at the very
|
|
||||||
# top of the packages page.
|
|
||||||
# #
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Create Tag
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-docker-release-tags-create:
|
|
||||||
name: >-
|
|
||||||
📦 Release › Create Tag
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Start
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🏳️ Start'
|
|
||||||
id: task_release_tags_start
|
|
||||||
run: |
|
|
||||||
echo "Creating Tag"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Checkout
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '✅ Checkout'
|
|
||||||
id: task_release_tags_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Fix Permissions
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '#️⃣ Manage Permissions'
|
|
||||||
id: task_release_tags_permissions
|
|
||||||
run: |
|
|
||||||
find ./ -name 'run' -exec chmod 755 {} \;
|
|
||||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
|
||||||
if [ -n "${WRONG_PERM}" ]; then
|
|
||||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
|
||||||
for i in ${WRONG_PERM}; do
|
|
||||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Create Tag
|
|
||||||
#
|
|
||||||
# only called in dispatch mode
|
|
||||||
# #
|
|
||||||
|
|
||||||
- uses: rickstaa/action-create-tag@v1
|
|
||||||
id: task_release_tags_create
|
|
||||||
if: ( github.event_name != 'workflow_dispatch' && inputs.DRY_RUN == false )
|
|
||||||
with:
|
|
||||||
tag: "${{ env.IMAGE_VERSION }}"
|
|
||||||
tag_exists_error: false
|
|
||||||
message: '${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}'
|
|
||||||
gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }}
|
|
||||||
gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Docker Release › Dockerhub › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-docker-release-dockerhub-arm64:
|
|
||||||
name: >-
|
|
||||||
📦 Release › Dockerhub › Arm64
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 10
|
|
||||||
needs: [ job-docker-release-tags-create ]
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Start › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🏳️ Start'
|
|
||||||
id: task_release_dh_start
|
|
||||||
run: |
|
|
||||||
echo "Starting Dockerhub arm64"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Checkout › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '✅ Checkout'
|
|
||||||
id: task_release_gh_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Get Timestamp
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Timestamp'
|
|
||||||
id: task_release_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "DOCKER_IMAGE=`echo ${{github.repository}} | tr '[:upper:]' '[:lower:]'`" >> ${GITHUB_ENV}
|
|
||||||
echo "DOCKER_SHA=${GITHUB_SHA}" >> $GITHUB_ENV
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Install Dependencies
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Install Dependencies'
|
|
||||||
id: task_release_dh_dependencies
|
|
||||||
run:
|
|
||||||
sudo apt-get install -qq dos2unix
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Execute dos2unix
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔐 Apply dos2unix'
|
|
||||||
id: task_release_dh_dos2unix
|
|
||||||
run: |
|
|
||||||
echo "⚠️⚠️⚠️ Running DOS2UNIX ⚠️⚠️⚠️"
|
|
||||||
find ./ \( -path "./.git" -o -path "./docs" -o -path "./.github" -o -path "*.png" -o -path "*.jpg" \) -prune -o -name '*' -print | xargs dos2unix --
|
|
||||||
echo "✅✅✅ Completed DOS2UNIX ✅✅✅"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Fix Permissions
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '#️⃣ Manage Permissions'
|
|
||||||
id: task_release_dh_permissions
|
|
||||||
run: |
|
|
||||||
find ./ -name 'run' -exec chmod 755 {} \;
|
|
||||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
|
||||||
if [ -n "${WRONG_PERM}" ]; then
|
|
||||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
|
||||||
for i in ${WRONG_PERM}; do
|
|
||||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › QEMU › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Set up QEMU'
|
|
||||||
id: task_release_dh_qemu
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Setup BuildX › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Setup Buildx'
|
|
||||||
id: task_release_dh_buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
with:
|
|
||||||
version: latest
|
|
||||||
driver-opts: 'image=moby/buildkit:latest'
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Registry Login › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Login to Dockerhub'
|
|
||||||
id: task_release_dh_registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ env.IMAGE_DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.ORG_BINARYNINJA_DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Meta › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔨 Dockerhub: Meta - Arm64'
|
|
||||||
id: task_release_dh_meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
${{ env.IMAGE_DOCKERHUB_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
tags: |
|
|
||||||
# latest no
|
|
||||||
type=raw,value=latest,enable=false
|
|
||||||
|
|
||||||
# tag add arm64
|
|
||||||
# type=raw,enable=true,priority=1000,value=arm64
|
|
||||||
|
|
||||||
# dispatch add x1.x.x-arm64
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=300,prefix=,suffix=-arm64,value=${{ env.IMAGE_VERSION }}
|
|
||||||
|
|
||||||
# dispatch add arm64-development
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == true }},priority=300,prefix=,suffix=-arm64,value=development
|
|
||||||
|
|
||||||
# tag add tag-arm64
|
|
||||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=-arm64,event=tag
|
|
||||||
|
|
||||||
flavor: |
|
|
||||||
latest=false
|
|
||||||
labels: |
|
|
||||||
org.opencontainers.image.VERSION=${{ env.IMAGE_VERSION }}
|
|
||||||
org.opencontainers.image.BUILDDATE=${{ env.NOW_DOCKER_LABEL }}
|
|
||||||
org.opencontainers.image.licenses=MIT
|
|
||||||
org.opencontainers.image.revision=${{ github.sha }}
|
|
||||||
org.opencontainers.image.vendor=${{ env.IMAGE_DOCKERHUB_AUTHOR }}
|
|
||||||
org.opencontainers.image.ref.name=${{ env.ref_name }}
|
|
||||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Build and Push › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Build & Push (linux/arm64)'
|
|
||||||
id: task_release_dh_push
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
if: ( github.event_name == 'workflow_dispatch' && inputs.DRY_RUN == false ) || ( github.event_name == 'push' )
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: Dockerfile.aarch64
|
|
||||||
platforms: linux/arm64
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.task_release_dh_meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.task_release_dh_meta.outputs.labels }}
|
|
||||||
provenance: false
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Checkpoint › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚠️ Checkpoint'
|
|
||||||
id: task_release_dh_checkpoint
|
|
||||||
run: |
|
|
||||||
echo "registry ............. Dockerhub"
|
|
||||||
echo "github.actor.......... ${{ github.actor }}"
|
|
||||||
echo "github.ref ........... ${{ github.ref }}"
|
|
||||||
echo "github.ref_name ...... ${{ github.ref_name }}"
|
|
||||||
echo "github.event_name .... ${{ github.event_name }}"
|
|
||||||
echo "inputs.DRY_RUN ....... ${{ inputs.DRY_RUN }}"
|
|
||||||
echo "env.AUTHOR ........... ${{ env.IMAGE_DOCKERHUB_AUTHOR }}"
|
|
||||||
echo "tags ................. ${{ steps.task_release_dh_meta.outputs.tags }}"
|
|
||||||
echo "labels ............... ${{ steps.task_release_dh_meta.outputs.labels }}"
|
|
||||||
echo "docker image ......... ${{ env.DOCKER_IMAGE }}"
|
|
||||||
echo "docker sha ........... ${{ env.DOCKER_SHA }}"
|
|
||||||
echo "docker image id ...... ${{ steps.task_release_dh_push.outputs.imageid }}"
|
|
||||||
echo "docker digest ........ ${{ steps.task_release_dh_push.outputs.digest }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Weekly Commit List'
|
|
||||||
id: task_release_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Notify Github
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔔 Send Discord Webhook Message'
|
|
||||||
id: task_release_notifications_discord_send
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Docker › Deploy (Dockerhub) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
${{ inputs.DEV_RELEASE == true && '### ⚠️⚠️ Development / Pre-release ⚠️⚠️' || '' }}
|
|
||||||
|
|
||||||
A new version of the docker container `${{ env.IMAGE_NAME }}` has been released from Github to Dockerhub. The image is available at:
|
|
||||||
- https://github.com/${{ github.repository }}/pkgs/container/${{ env.IMAGE_NAME }}
|
|
||||||
|
|
||||||
- Release Type: `${{ inputs.DEV_RELEASE == true && '⚠️⚠️ Development / Pre-release ⚠️⚠️' || 'Stable' }}`
|
|
||||||
- Pull: `docker pull ${{ env.DOCKER_IMAGE }}:${{ inputs.DEV_RELEASE == true && 'development' || env.IMAGE_VERSION }}-amd64`
|
|
||||||
- Pull: `docker pull ${{ env.DOCKER_IMAGE }}@${{ steps.task_release_dh_push.outputs.digest }}`
|
|
||||||
- Dry Run: `${{ inputs.DRY_RUN }}`
|
|
||||||
- Source: `Dockerhub` https://hub.docker.com/r/${{ env.IMAGE_DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}
|
|
||||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
- Version: `${{ env.IMAGE_VERSION }}`
|
|
||||||
- Branch: `${{ github.ref_name }}`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
### Tags
|
|
||||||
-# This docker image will use the following tags:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_dh_meta.outputs.tags }}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Labels
|
|
||||||
-# This docker image embeds the following labels:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_dh_meta.outputs.labels }}
|
|
||||||
```
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Docker Release › Dockerhub › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-docker-release-dockerhub-amd64:
|
|
||||||
name: >-
|
|
||||||
📦 Release › Dockerhub › Amd64
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 10
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
needs: [ job-docker-release-tags-create, job-docker-release-dockerhub-arm64 ]
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Start › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🏳️ Start'
|
|
||||||
id: task_release_dh_start
|
|
||||||
run: |
|
|
||||||
echo "Starting Dockerhub docker release"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Checkout › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '✅ Checkout'
|
|
||||||
id: task_release_gh_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Get Timestamp
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Timestamp'
|
|
||||||
id: task_release_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "DOCKER_IMAGE=`echo ${{github.repository}} | tr '[:upper:]' '[:lower:]'`" >> ${GITHUB_ENV}
|
|
||||||
echo "DOCKER_SHA=${GITHUB_SHA}" >> $GITHUB_ENV
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Install Dependencies
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Install Dependencies'
|
|
||||||
id: task_release_dh_dependencies
|
|
||||||
run:
|
|
||||||
sudo apt-get install -qq dos2unix
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Execute dos2unix
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔐 Apply dos2unix'
|
|
||||||
id: task_release_dh_dos2unix
|
|
||||||
run: |
|
|
||||||
find ./ \( -path "./.git" -o -path "./docs" -o -path "./.github" -o -path "*.png" -o -path "*.jpg" \) -prune -o -name '*' -print | xargs dos2unix --
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Fix Permissions
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '#️⃣ Manage Permissions'
|
|
||||||
id: task_release_dh_permissions
|
|
||||||
run: |
|
|
||||||
find ./ -name 'run' -exec chmod 755 {} \;
|
|
||||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
|
||||||
if [ -n "${WRONG_PERM}" ]; then
|
|
||||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
|
||||||
for i in ${WRONG_PERM}; do
|
|
||||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › QEMU › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Set up QEMU'
|
|
||||||
id: task_release_dh_qemu
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Setup BuildX › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Setup Buildx'
|
|
||||||
id: task_release_dh_buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
with:
|
|
||||||
version: latest
|
|
||||||
driver-opts: 'image=moby/buildkit:latest'
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Registry Login › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Login to Dockerhub'
|
|
||||||
id: task_release_dh_registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ env.IMAGE_DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.ORG_BINARYNINJA_DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Meta › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔨 Dockerhub: Meta - Amd64'
|
|
||||||
id: task_release_dh_meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
${{ env.IMAGE_DOCKERHUB_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
tags: |
|
|
||||||
# latest yes
|
|
||||||
type=raw,value=latest,enable=${{ !inputs.DEV_RELEASE }}
|
|
||||||
|
|
||||||
# tag add amd64
|
|
||||||
# type=raw,enable=true,priority=1000,value=amd64
|
|
||||||
|
|
||||||
# dispatch add x1.x.x-amd64
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=300,prefix=,suffix=-amd64,value=${{ env.IMAGE_VERSION }}
|
|
||||||
|
|
||||||
# dispatch add amd64-development
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == true }},priority=300,prefix=,suffix=-amd64,value=development
|
|
||||||
|
|
||||||
# tag add tag-arm64
|
|
||||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=-amd64,event=tag
|
|
||||||
|
|
||||||
# add development tag to default architecture (amd64)
|
|
||||||
type=raw,enable=${{ inputs.DEV_RELEASE }},priority=400,prefix=,suffix=,value=development
|
|
||||||
flavor: |
|
|
||||||
latest=${{ !inputs.DEV_RELEASE }}
|
|
||||||
labels: |
|
|
||||||
org.opencontainers.image.VERSION=${{ env.IMAGE_VERSION }}
|
|
||||||
org.opencontainers.image.BUILDDATE=${{ env.NOW_DOCKER_LABEL }}
|
|
||||||
org.opencontainers.image.licenses=MIT
|
|
||||||
org.opencontainers.image.revision=${{ github.sha }}
|
|
||||||
org.opencontainers.image.vendor=${{ env.IMAGE_DOCKERHUB_AUTHOR }}
|
|
||||||
org.opencontainers.image.ref.name=${{ env.ref_name }}
|
|
||||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Build and Push › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Build & Push (linux/amd64)'
|
|
||||||
id: task_release_dh_push
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
if: ( github.event_name == 'workflow_dispatch' && inputs.DRY_RUN == false ) || ( github.event_name == 'push' )
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: Dockerfile
|
|
||||||
platforms: linux/amd64
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.task_release_dh_meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.task_release_dh_meta.outputs.labels }}
|
|
||||||
provenance: false
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Checkpoint › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚠️ Checkpoint'
|
|
||||||
id: task_release_dh_checkpoint
|
|
||||||
run: |
|
|
||||||
echo "registry ............. Dockerhub"
|
|
||||||
echo "github.actor.......... ${{ github.actor }}"
|
|
||||||
echo "github.ref ........... ${{ github.ref }}"
|
|
||||||
echo "github.ref_name ...... ${{ github.ref_name }}"
|
|
||||||
echo "github.event_name .... ${{ github.event_name }}"
|
|
||||||
echo "inputs.DRY_RUN ....... ${{ inputs.DRY_RUN }}"
|
|
||||||
echo "env.AUTHOR ........... ${{ env.IMAGE_DOCKERHUB_AUTHOR }}"
|
|
||||||
echo "tags ................. ${{ steps.task_release_dh_meta.outputs.tags }}"
|
|
||||||
echo "labels ............... ${{ steps.task_release_dh_meta.outputs.labels }}"
|
|
||||||
echo "docker image ......... ${{ env.DOCKER_IMAGE }}"
|
|
||||||
echo "docker sha ........... ${{ env.DOCKER_SHA }}"
|
|
||||||
echo "docker image id ...... ${{ steps.task_release_dh_push.outputs.imageid }}"
|
|
||||||
echo "docker digest ........ ${{ steps.task_release_dh_push.outputs.digest }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Weekly Commit List'
|
|
||||||
id: task_release_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Dockerhub › Notify Github
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔔 Send Discord Webhook Message'
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Docker › Deploy (Dockerhub) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
${{ inputs.DEV_RELEASE == true && '### ⚠️⚠️ Development / Pre-release ⚠️⚠️' || '' }}
|
|
||||||
|
|
||||||
A new version of the docker container `${{ env.IMAGE_NAME }}` has been released from Github to Dockerhub. The image is available at:
|
|
||||||
- https://github.com/${{ github.repository }}/pkgs/container/${{ env.IMAGE_NAME }}
|
|
||||||
|
|
||||||
- Release Type: `${{ inputs.DEV_RELEASE == true && '⚠️⚠️ Development / Pre-release ⚠️⚠️' || 'Stable' }}`
|
|
||||||
- Pull: `docker pull ${{ env.DOCKER_IMAGE }}:${{ inputs.DEV_RELEASE == true && 'development' || env.IMAGE_VERSION }}-amd64`
|
|
||||||
- Pull: `docker pull ${{ env.DOCKER_IMAGE }}@${{ steps.task_release_dh_push.outputs.digest }}`
|
|
||||||
- Dry Run: `${{ inputs.DRY_RUN }}`
|
|
||||||
- Source: `Dockerhub` https://hub.docker.com/r/${{ env.IMAGE_DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}
|
|
||||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
- Version: `${{ env.IMAGE_VERSION }}`
|
|
||||||
- Branch: `${{ github.ref_name }}`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
### Tags
|
|
||||||
-# This docker image will use the following tags:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_dh_meta.outputs.tags }}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Labels
|
|
||||||
-# This docker image embeds the following labels:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_dh_meta.outputs.labels }}
|
|
||||||
```
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
724
.github/workflows/deploy-docker-gitea.yml
vendored
@@ -1,724 +0,0 @@
|
|||||||
# #
|
|
||||||
# @type github workflow
|
|
||||||
# @author Aetherinox
|
|
||||||
# @url https://github.com/Aetherinox
|
|
||||||
# @usage deploys docker container to Gitea and send message to discord
|
|
||||||
# upload this workflow to both the `main` branch of the tvapp2 repository
|
|
||||||
# @secrets secrets.ADMINSERV_GPG_KEY_ASC gpg private key (armored) | BEGIN PGP PRIVATE KEY BLOCK
|
|
||||||
# secrets.ADMINSERV_GPG_PASSPHRASE gpg private key passphrase
|
|
||||||
# secrets.ORG_BINARYNINJA_GITEA_TOKEN gitea personal access token (classic) with package:write permission
|
|
||||||
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES Discord webhook to report releases from gitea to discord
|
|
||||||
# #
|
|
||||||
|
|
||||||
name: "📦 Deploy › Docker › Gitea"
|
|
||||||
run-name: "📦 Deploy › Docker › Gitea"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Triggers
|
|
||||||
# #
|
|
||||||
|
|
||||||
on:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Trigger › Workflow Dispatch
|
|
||||||
#
|
|
||||||
# If any values are not provided, will use fallback env variable
|
|
||||||
# #
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Image Name
|
|
||||||
#
|
|
||||||
# used in github image path
|
|
||||||
# git.binaryninja.net/${{ env.IMAGE_GITEA_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_NAME:
|
|
||||||
description: '📦 Image Name'
|
|
||||||
required: true
|
|
||||||
default: 'tvapp2'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Image Version
|
|
||||||
#
|
|
||||||
# used to create new release tag, and add version to docker image name
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_VERSION:
|
|
||||||
description: '🏷️ Image Version'
|
|
||||||
required: true
|
|
||||||
default: '1.0.0'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Gitea › Author
|
|
||||||
#
|
|
||||||
# used in github image path
|
|
||||||
# git.binaryninja.net/${{ env.IMAGE_GITEA_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_GITEA_AUTHOR:
|
|
||||||
description: '🪪 Image Author'
|
|
||||||
required: true
|
|
||||||
default: 'BinaryNinja'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Gitea › Username
|
|
||||||
#
|
|
||||||
# this is the user to sign into gitea as.
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_GITEA_USERNAME:
|
|
||||||
description: '🪪 Gitea Username'
|
|
||||||
required: true
|
|
||||||
default: 'aetherinox'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# true no changes to the repo will be made
|
|
||||||
# false workflow will behave normally, and push any changes detected to the files
|
|
||||||
# #
|
|
||||||
|
|
||||||
DRY_RUN:
|
|
||||||
description: '🐛 Dry Run (Debug)'
|
|
||||||
required: true
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
# #
|
|
||||||
# true released version will be marked as a development build and will have the v1.x.x-development tag instead of -latest
|
|
||||||
# false release version will be marked with -latest docker tag
|
|
||||||
# #
|
|
||||||
|
|
||||||
DEV_RELEASE:
|
|
||||||
description: '🧪 Development Release'
|
|
||||||
required: true
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Trigger › Push
|
|
||||||
# #
|
|
||||||
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- '*'
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Environment Vars
|
|
||||||
# #
|
|
||||||
|
|
||||||
env:
|
|
||||||
IMAGE_NAME: ${{ github.event.inputs.IMAGE_NAME || 'tvapp2' }}
|
|
||||||
IMAGE_VERSION: ${{ github.event.inputs.IMAGE_VERSION || '1.0.0' }}
|
|
||||||
IMAGE_GITEA_AUTHOR: ${{ github.event.inputs.IMAGE_GITEA_AUTHOR || 'BinaryNinja' }}
|
|
||||||
IMAGE_GITEA_USERNAME: ${{ github.event.inputs.IMAGE_GITEA_USERNAME || 'BinaryNinja' }}
|
|
||||||
BOT_NAME_1: EuropaServ
|
|
||||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Jobs
|
|
||||||
#
|
|
||||||
# The way pushed docker containers on Gitea work, the most recent image built goes at the top.
|
|
||||||
# We will use the order below which builds the :latest image last so that it appears at the very
|
|
||||||
# top of the packages page.
|
|
||||||
# #
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Create Tag
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-docker-release-tags-create:
|
|
||||||
name: >-
|
|
||||||
📦 Release › Create Tag
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Start
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🏳️ Start'
|
|
||||||
id: task_release_tags_start
|
|
||||||
run: |
|
|
||||||
echo "Creating Tag"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Checkout
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '✅ Checkout'
|
|
||||||
id: task_release_tags_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Fix Permissions
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '#️⃣ Manage Permissions'
|
|
||||||
id: task_release_tags_permissions
|
|
||||||
run: |
|
|
||||||
find ./ -name 'run' -exec chmod 755 {} \;
|
|
||||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
|
||||||
if [ -n "${WRONG_PERM}" ]; then
|
|
||||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
|
||||||
for i in ${WRONG_PERM}; do
|
|
||||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Create Tag
|
|
||||||
#
|
|
||||||
# only called in dispatch mode
|
|
||||||
# #
|
|
||||||
|
|
||||||
- uses: rickstaa/action-create-tag@v1
|
|
||||||
id: task_release_tags_create
|
|
||||||
if: ( github.event_name != 'workflow_dispatch' && inputs.DRY_RUN == false )
|
|
||||||
with:
|
|
||||||
tag: "${{ env.IMAGE_VERSION }}"
|
|
||||||
tag_exists_error: false
|
|
||||||
message: '${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}'
|
|
||||||
gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }}
|
|
||||||
gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Docker Release › Gitea › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-docker-release-gitea-arm64:
|
|
||||||
name: >-
|
|
||||||
📦 Release › Gitea › Arm64
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 10
|
|
||||||
needs: [ job-docker-release-tags-create ]
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Start › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🏳️ Start'
|
|
||||||
id: task_release_gi_start
|
|
||||||
run: |
|
|
||||||
echo "Starting Gitea Docker arm64"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Checkout › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '✅ Checkout'
|
|
||||||
id: task_release_gh_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Get Timestamp
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Timestamp'
|
|
||||||
id: task_release_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "DOCKER_IMAGE=`echo ${{github.repository}} | tr '[:upper:]' '[:lower:]'`" >> ${GITHUB_ENV}
|
|
||||||
echo "DOCKER_SHA=${GITHUB_SHA}" >> $GITHUB_ENV
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Install Dependencies
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Install Dependencies'
|
|
||||||
id: task_release_gi_dependencies
|
|
||||||
run:
|
|
||||||
sudo apt-get install -qq dos2unix
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Execute dos2unix
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔐 Apply dos2unix'
|
|
||||||
id: task_release_gi_dos2unix
|
|
||||||
run: |
|
|
||||||
echo "⚠️⚠️⚠️ Running DOS2UNIX ⚠️⚠️⚠️"
|
|
||||||
find ./ \( -path "./.git" -o -path "./docs" -o -path "./.github" -o -path "*.png" -o -path "*.jpg" \) -prune -o -name '*' -print | xargs dos2unix --
|
|
||||||
echo "✅✅✅ Completed DOS2UNIX ✅✅✅"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Fix Permissions
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '#️⃣ Manage Permissions'
|
|
||||||
id: task_release_gi_permissions
|
|
||||||
run: |
|
|
||||||
find ./ -name 'run' -exec chmod 755 {} \;
|
|
||||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
|
||||||
if [ -n "${WRONG_PERM}" ]; then
|
|
||||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
|
||||||
for i in ${WRONG_PERM}; do
|
|
||||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › QEMU › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Set up QEMU'
|
|
||||||
id: task_release_gi_qemu
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Setup BuildX › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Setup Buildx'
|
|
||||||
id: task_release_gi_buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
with:
|
|
||||||
version: latest
|
|
||||||
driver-opts: 'image=moby/buildkit:latest'
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Registry Login › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Login to Gitea'
|
|
||||||
id: task_release_gi_registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: git.binaryninja.net
|
|
||||||
username: ${{ env.IMAGE_GITEA_USERNAME }}
|
|
||||||
password: ${{ secrets.ORG_BINARYNINJA_GITEA_TOKEN }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Meta › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔨 Gitea: Meta - Arm64'
|
|
||||||
id: task_release_gi_meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
git.binaryninja.net/${{ env.IMAGE_GITEA_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
tags: |
|
|
||||||
# latest no
|
|
||||||
type=raw,value=latest,enable=false
|
|
||||||
|
|
||||||
# tag add arm64
|
|
||||||
# type=raw,enable=true,priority=1000,value=arm64
|
|
||||||
|
|
||||||
# dispatch add x1.x.x-arm64
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=300,prefix=,suffix=-arm64,value=${{ env.IMAGE_VERSION }}
|
|
||||||
|
|
||||||
# dispatch add arm64-development
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == true }},priority=300,prefix=,suffix=-arm64,value=development
|
|
||||||
|
|
||||||
# tag add tag-arm64
|
|
||||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=-arm64,event=tag
|
|
||||||
flavor: |
|
|
||||||
latest=false
|
|
||||||
labels: |
|
|
||||||
org.opencontainers.image.VERSION=${{ env.IMAGE_VERSION }}
|
|
||||||
org.opencontainers.image.BUILDDATE=${{ env.NOW_DOCKER_LABEL }}
|
|
||||||
org.opencontainers.image.licenses=MIT
|
|
||||||
org.opencontainers.image.revision=${{ github.sha }}
|
|
||||||
org.opencontainers.image.vendor=${{ env.IMAGE_GITEA_AUTHOR }}
|
|
||||||
org.opencontainers.image.ref.name=${{ env.ref_name }}
|
|
||||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Build and Push › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Build & Push (linux/arm64)'
|
|
||||||
id: task_release_gi_push
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
if: ( github.event_name == 'workflow_dispatch' && inputs.DRY_RUN == false ) || ( github.event_name == 'push' )
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: Dockerfile.aarch64
|
|
||||||
platforms: linux/arm64
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.task_release_gi_meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.task_release_gi_meta.outputs.labels }}
|
|
||||||
provenance: false
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Checkpoint › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚠️ Checkpoint'
|
|
||||||
id: task_release_gi_checkpoint
|
|
||||||
run: |
|
|
||||||
echo "registry ............. Gitea"
|
|
||||||
echo "github.actor.......... ${{ github.actor }}"
|
|
||||||
echo "github.ref ........... ${{ github.ref }}"
|
|
||||||
echo "github.ref_name ...... ${{ github.ref_name }}"
|
|
||||||
echo "github.event_name .... ${{ github.event_name }}"
|
|
||||||
echo "inputs.DRY_RUN ....... ${{ inputs.DRY_RUN }}"
|
|
||||||
echo "env.AUTHOR ........... ${{ env.IMAGE_GITEA_AUTHOR }}"
|
|
||||||
echo "tags ................. ${{ steps.task_release_gi_meta.outputs.tags }}"
|
|
||||||
echo "labels ............... ${{ steps.task_release_gi_meta.outputs.labels }}"
|
|
||||||
echo "docker image ......... ${{ env.DOCKER_IMAGE }}"
|
|
||||||
echo "docker sha ........... ${{ env.DOCKER_SHA }}"
|
|
||||||
echo "docker image id ...... ${{ steps.task_release_gi_push.outputs.imageid }}"
|
|
||||||
echo "docker digest ........ ${{ steps.task_release_gi_push.outputs.digest }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Weekly Commit List'
|
|
||||||
id: task_release_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Notify Gitea
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔔 Send Discord Webhook Message'
|
|
||||||
id: task_release_notifications_discord_send
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Docker › Deploy (Gitea) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
${{ inputs.DEV_RELEASE == true && '### ⚠️⚠️ Development / Pre-release ⚠️⚠️' || '' }}
|
|
||||||
|
|
||||||
A new version of the docker container `${{ env.IMAGE_NAME }}` has been released from Github to Gitea. The image is available at:
|
|
||||||
- https://git.binaryninja.net/${{ env.IMAGE_GITEA_USERNAME }}/${{ env.IMAGE_NAME }}/packages
|
|
||||||
|
|
||||||
- Release Type: `${{ inputs.DEV_RELEASE == true && '⚠️⚠️ Development / Pre-release ⚠️⚠️' || 'Stable' }}`
|
|
||||||
- Pull: `docker pull git.binaryninja.net/${{ env.DOCKER_IMAGE }}:${{ inputs.DEV_RELEASE == true && 'development' || env.IMAGE_VERSION }}-arm64`
|
|
||||||
- Pull: `docker pull git.binaryninja.net/${{ env.DOCKER_IMAGE }}@${{ steps.task_release_gi_push.outputs.digest }}`
|
|
||||||
- Dry Run: `${{ inputs.DRY_RUN }}`
|
|
||||||
- Source: `Gitea` https://git.binaryninja.net/${{ env.IMAGE_GITEA_USERNAME }}/${{ env.IMAGE_NAME }}/packages
|
|
||||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
- Version: `${{ env.IMAGE_VERSION }}`
|
|
||||||
- Branch: `${{ github.ref_name }}`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
### Tags
|
|
||||||
-# This docker image will use the following tags:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_gi_meta.outputs.tags }}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Labels
|
|
||||||
-# This docker image embeds the following labels:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_gi_meta.outputs.labels }}
|
|
||||||
```
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Docker Release › Gitea › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-docker-release-gitea-amd64:
|
|
||||||
name: >-
|
|
||||||
📦 Release › Gitea › Amd64
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 10
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
needs: [ job-docker-release-tags-create, job-docker-release-gitea-arm64 ]
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Start › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🏳️ Start'
|
|
||||||
id: task_release_gi_start
|
|
||||||
run: |
|
|
||||||
echo "Starting Gitea docker release"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Checkout
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '✅ Checkout'
|
|
||||||
id: task_release_gh_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Get Timestamp
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Timestamp'
|
|
||||||
id: task_release_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "DOCKER_IMAGE=`echo ${{github.repository}} | tr '[:upper:]' '[:lower:]'`" >> ${GITHUB_ENV}
|
|
||||||
echo "DOCKER_SHA=${GITHUB_SHA}" >> $GITHUB_ENV
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Install Dependencies
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Install Dependencies'
|
|
||||||
id: task_release_gi_dependencies
|
|
||||||
run:
|
|
||||||
sudo apt-get install -qq dos2unix
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Execute dos2unix
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔐 Apply dos2unix'
|
|
||||||
id: task_release_gi_dos2unix
|
|
||||||
run: |
|
|
||||||
find ./ \( -path "./.git" -o -path "./docs" -o -path "./.github" -o -path "*.png" -o -path "*.jpg" \) -prune -o -name '*' -print | xargs dos2unix --
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Fix Permissions
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '#️⃣ Manage Permissions'
|
|
||||||
id: task_release_gi_permissions
|
|
||||||
run: |
|
|
||||||
find ./ -name 'run' -exec chmod 755 {} \;
|
|
||||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
|
||||||
if [ -n "${WRONG_PERM}" ]; then
|
|
||||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
|
||||||
for i in ${WRONG_PERM}; do
|
|
||||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › QEMU › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Set up QEMU'
|
|
||||||
id: task_release_gi_qemu
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Setup BuildX › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Setup Buildx'
|
|
||||||
id: task_release_gi_buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
with:
|
|
||||||
version: latest
|
|
||||||
driver-opts: 'image=moby/buildkit:latest'
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Registry Login › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Login to Gitea'
|
|
||||||
id: task_release_gi_registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: git.binaryninja.net
|
|
||||||
username: ${{ env.IMAGE_GITEA_USERNAME }}
|
|
||||||
password: ${{ secrets.ORG_BINARYNINJA_GITEA_TOKEN }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Meta › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔨 Gitea: Meta - Amd64'
|
|
||||||
id: task_release_gi_meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
git.binaryninja.net/${{ env.IMAGE_GITEA_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
tags: |
|
|
||||||
# latest yes
|
|
||||||
type=raw,value=latest,enable=${{ !inputs.DEV_RELEASE }}
|
|
||||||
|
|
||||||
# tag add amd64
|
|
||||||
# type=raw,enable=true,priority=1000,value=amd64
|
|
||||||
|
|
||||||
# dispatch add x1.x.x-amd64
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=300,prefix=,suffix=-amd64,value=${{ env.IMAGE_VERSION }}
|
|
||||||
|
|
||||||
# dispatch add amd64-development
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == true }},priority=300,prefix=,suffix=-amd64,value=development
|
|
||||||
|
|
||||||
# tag add tag-amd64
|
|
||||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=-amd64,event=tag
|
|
||||||
|
|
||||||
# add development tag to default architecture (amd64)
|
|
||||||
type=raw,enable=${{ inputs.DEV_RELEASE }},priority=400,prefix=,suffix=,value=development
|
|
||||||
flavor: |
|
|
||||||
latest=${{ !inputs.DEV_RELEASE }}
|
|
||||||
labels: |
|
|
||||||
org.opencontainers.image.VERSION=${{ env.IMAGE_VERSION }}
|
|
||||||
org.opencontainers.image.BUILDDATE=${{ env.NOW_DOCKER_LABEL }}
|
|
||||||
org.opencontainers.image.licenses=MIT
|
|
||||||
org.opencontainers.image.revision=${{ github.sha }}
|
|
||||||
org.opencontainers.image.vendor=${{ env.IMAGE_GITEA_AUTHOR }}
|
|
||||||
org.opencontainers.image.ref.name=${{ env.ref_name }}
|
|
||||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Build and Push › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Build & Push (linux/amd64)'
|
|
||||||
id: task_release_gi_push
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
if: ( github.event_name == 'workflow_dispatch' && inputs.DRY_RUN == false ) || ( github.event_name == 'push' )
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: Dockerfile
|
|
||||||
platforms: linux/amd64
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.task_release_gi_meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.task_release_gi_meta.outputs.labels }}
|
|
||||||
provenance: false
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Checkpoint › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚠️ Checkpoint'
|
|
||||||
id: task_release_gi_checkpoint
|
|
||||||
run: |
|
|
||||||
echo "registry ............. Gitea"
|
|
||||||
echo "github.actor.......... ${{ github.actor }}"
|
|
||||||
echo "github.ref ........... ${{ github.ref }}"
|
|
||||||
echo "github.ref_name ...... ${{ github.ref_name }}"
|
|
||||||
echo "github.event_name .... ${{ github.event_name }}"
|
|
||||||
echo "inputs.DRY_RUN ....... ${{ inputs.DRY_RUN }}"
|
|
||||||
echo "env.AUTHOR ........... ${{ env.IMAGE_GITEA_AUTHOR }}"
|
|
||||||
echo "tags ................. ${{ steps.task_release_gi_meta.outputs.tags }}"
|
|
||||||
echo "labels ............... ${{ steps.task_release_gi_meta.outputs.labels }}"
|
|
||||||
echo "docker image ......... ${{ env.DOCKER_IMAGE }}"
|
|
||||||
echo "docker sha ........... ${{ env.DOCKER_SHA }}"
|
|
||||||
echo "docker image id ...... ${{ steps.task_release_gi_push.outputs.imageid }}"
|
|
||||||
echo "docker digest ........ ${{ steps.task_release_gi_push.outputs.digest }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Weekly Commit List'
|
|
||||||
id: task_release_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Gitea › Notify Gitea
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔔 Send Discord Webhook Message'
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Docker › Deploy (Gitea) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
${{ inputs.DEV_RELEASE == true && '### ⚠️⚠️ Development / Pre-release ⚠️⚠️' || '' }}
|
|
||||||
|
|
||||||
A new version of the docker container `${{ env.IMAGE_NAME }}` has been released from Github to Gitea. The image is available at:
|
|
||||||
- https://git.binaryninja.net/${{ env.IMAGE_GITEA_USERNAME }}/${{ env.IMAGE_NAME }}/packages
|
|
||||||
|
|
||||||
- Release Type: `${{ inputs.DEV_RELEASE == true && '⚠️⚠️ Development / Pre-release ⚠️⚠️' || 'Stable' }}`
|
|
||||||
- Pull: `docker pull git.binaryninja.net/${{ env.DOCKER_IMAGE }}:${{ inputs.DEV_RELEASE == true && 'development' || env.IMAGE_VERSION }}-amd64`
|
|
||||||
- Pull: `docker pull git.binaryninja.net/${{ env.DOCKER_IMAGE }}@${{ steps.task_release_gi_push.outputs.digest }}`
|
|
||||||
- Dry Run: `${{ inputs.DRY_RUN }}`
|
|
||||||
- Source: `Gitea` https://git.binaryninja.net/${{ env.IMAGE_GITEA_USERNAME }}/${{ env.IMAGE_NAME }}/packages
|
|
||||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
- Version: `${{ env.IMAGE_VERSION }}`
|
|
||||||
- Branch: `${{ github.ref_name }}`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
### Tags
|
|
||||||
-# This docker image will use the following tags:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_gi_meta.outputs.tags }}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Labels
|
|
||||||
-# This docker image embeds the following labels:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_gi_meta.outputs.labels }}
|
|
||||||
```
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
720
.github/workflows/deploy-docker-github.yml
vendored
@@ -1,720 +0,0 @@
|
|||||||
# #
|
|
||||||
# @type github workflow
|
|
||||||
# @author Aetherinox
|
|
||||||
# @url https://github.com/Aetherinox
|
|
||||||
# @usage deploys docker container to github and send message to discord
|
|
||||||
# upload this workflow to both the `main` branch of the tvapp2 repository
|
|
||||||
# @secrets secrets.ADMINSERV_GPG_KEY_ASC gpg private key (armored) | BEGIN PGP PRIVATE KEY BLOCK
|
|
||||||
# secrets.ADMINSERV_GPG_PASSPHRASE gpg private key passphrase
|
|
||||||
# secrets.ORG_BINARYNINJA_TOKEN_CL github personal access token (classic) with package:write permission
|
|
||||||
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES Discord webhook to report releases from github to discord
|
|
||||||
# #
|
|
||||||
|
|
||||||
name: "📦 Deploy › Docker › Github"
|
|
||||||
run-name: "📦 Deploy › Docker › Github"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Triggers
|
|
||||||
# #
|
|
||||||
|
|
||||||
on:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Trigger › Workflow Dispatch
|
|
||||||
#
|
|
||||||
# If any values are not provided, will use fallback env variable
|
|
||||||
# #
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Image Name
|
|
||||||
#
|
|
||||||
# used in github image path
|
|
||||||
# ghcr.io/${{ env.IMAGE_GHCR_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_NAME:
|
|
||||||
description: '📦 Image Name'
|
|
||||||
required: true
|
|
||||||
default: 'tvapp2'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Image Version
|
|
||||||
#
|
|
||||||
# used to create new release tag, and add version to docker image name
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_VERSION:
|
|
||||||
description: '🏷️ Image Version'
|
|
||||||
required: true
|
|
||||||
default: '1.0.0'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Image Author
|
|
||||||
#
|
|
||||||
# used in github image path
|
|
||||||
# ghcr.io/${{ env.IMAGE_GHCR_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_GHCR_AUTHOR:
|
|
||||||
description: '🪪 Image Author'
|
|
||||||
required: true
|
|
||||||
default: 'TheBinaryNinja'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Image ghcr username
|
|
||||||
#
|
|
||||||
# this is the user to sign into ghcr as.
|
|
||||||
# #
|
|
||||||
|
|
||||||
IMAGE_GHCR_USERNAME:
|
|
||||||
description: '🪪 ghcr.io Username'
|
|
||||||
required: true
|
|
||||||
default: 'TheBinaryNinja'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# true no changes to the repo will be made
|
|
||||||
# false workflow will behave normally, and push any changes detected to the files
|
|
||||||
# #
|
|
||||||
|
|
||||||
DRY_RUN:
|
|
||||||
description: '🐛 Dry Run (Debug)'
|
|
||||||
required: true
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
# #
|
|
||||||
# true released version will be marked as a development build and will have the v1.x.x-development tag instead of -latest
|
|
||||||
# false release version will be marked with -latest docker tag
|
|
||||||
# #
|
|
||||||
|
|
||||||
DEV_RELEASE:
|
|
||||||
description: '🧪 Development Release'
|
|
||||||
required: true
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Trigger › Push
|
|
||||||
# #
|
|
||||||
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- '*'
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Environment Vars
|
|
||||||
# #
|
|
||||||
|
|
||||||
env:
|
|
||||||
IMAGE_NAME: ${{ github.event.inputs.IMAGE_NAME || 'tvapp2' }}
|
|
||||||
IMAGE_VERSION: ${{ github.event.inputs.IMAGE_VERSION || '1.0.0' }}
|
|
||||||
IMAGE_GHCR_AUTHOR: ${{ github.event.inputs.IMAGE_GHCR_AUTHOR || 'BinaryNinja' }}
|
|
||||||
IMAGE_GHCR_USERNAME: ${{ github.event.inputs.IMAGE_GHCR_USERNAME || 'BinaryNinja' }}
|
|
||||||
BOT_NAME_1: EuropaServ
|
|
||||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Jobs
|
|
||||||
#
|
|
||||||
# The way pushed docker containers on Github work, the most recent image built goes at the top.
|
|
||||||
# We will use the order below which builds the :latest image last so that it appears at the very
|
|
||||||
# top of the packages page.
|
|
||||||
# #
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Create Tag
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-docker-release-tags-create:
|
|
||||||
name: >-
|
|
||||||
📦 Release › Create Tag
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Start
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🏳️ Start'
|
|
||||||
id: task_release_tags_start
|
|
||||||
run: |
|
|
||||||
echo "Creating Tag"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Checkout
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '✅ Checkout'
|
|
||||||
id: task_release_tags_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Fix Permissions
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '#️⃣ Manage Permissions'
|
|
||||||
id: task_release_tags_permissions
|
|
||||||
run: |
|
|
||||||
find ./ -name 'run' -exec chmod 755 {} \;
|
|
||||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
|
||||||
if [ -n "${WRONG_PERM}" ]; then
|
|
||||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
|
||||||
for i in ${WRONG_PERM}; do
|
|
||||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Tags › Create Tag
|
|
||||||
#
|
|
||||||
# only called in dispatch mode
|
|
||||||
# #
|
|
||||||
|
|
||||||
- uses: rickstaa/action-create-tag@v1
|
|
||||||
id: task_release_tags_create
|
|
||||||
if: ( github.event_name != 'workflow_dispatch' && inputs.DRY_RUN == false )
|
|
||||||
with:
|
|
||||||
tag: "${{ env.IMAGE_VERSION }}"
|
|
||||||
tag_exists_error: false
|
|
||||||
message: '${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}'
|
|
||||||
gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }}
|
|
||||||
gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Docker Release › Github › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-docker-release-github-arm64:
|
|
||||||
name: >-
|
|
||||||
📦 Release › Github › Arm64
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 10
|
|
||||||
needs: [ job-docker-release-tags-create ]
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Start › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🏳️ Start'
|
|
||||||
id: task_release_gh_start
|
|
||||||
run: |
|
|
||||||
echo "Starting Github Docker arm64"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Checkout › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '✅ Checkout'
|
|
||||||
id: task_release_gh_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Get Timestamp
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Timestamp'
|
|
||||||
id: task_release_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "DOCKER_IMAGE=`echo ${{github.repository}} | tr '[:upper:]' '[:lower:]'`" >> ${GITHUB_ENV}
|
|
||||||
echo "DOCKER_SHA=${GITHUB_SHA}" >> $GITHUB_ENV
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Install Dependencies
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Install Dependencies'
|
|
||||||
id: task_release_gh_dependencies
|
|
||||||
run:
|
|
||||||
sudo apt-get install -qq dos2unix
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Execute dos2unix
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔐 Apply dos2unix'
|
|
||||||
id: task_release_gh_dos2unix
|
|
||||||
run: |
|
|
||||||
echo "⚠️⚠️⚠️ Running DOS2UNIX ⚠️⚠️⚠️"
|
|
||||||
find ./ \( -path "./.git" -o -path "./docs" -o -path "./.github" -o -path "*.png" -o -path "*.jpg" \) -prune -o -name '*' -print | xargs dos2unix --
|
|
||||||
echo "✅✅✅ Completed DOS2UNIX ✅✅✅"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Fix Permissions
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '#️⃣ Manage Permissions'
|
|
||||||
id: task_release_gh_permissions
|
|
||||||
run: |
|
|
||||||
find ./ -name 'run' -exec chmod 755 {} \;
|
|
||||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
|
||||||
if [ -n "${WRONG_PERM}" ]; then
|
|
||||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
|
||||||
for i in ${WRONG_PERM}; do
|
|
||||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › QEMU › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Set up QEMU'
|
|
||||||
id: task_release_gh_qemu
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Setup BuildX › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Setup Buildx'
|
|
||||||
id: task_release_gh_buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
with:
|
|
||||||
version: latest
|
|
||||||
driver-opts: 'image=moby/buildkit:latest'
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Registry Login › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Login to Github'
|
|
||||||
id: task_release_gh_registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ env.IMAGE_GHCR_USERNAME }}
|
|
||||||
password: ${{ secrets.ORG_BINARYNINJA_TOKEN_CL }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Meta › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔨 Github: Meta - Arm64'
|
|
||||||
id: task_release_gh_meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
ghcr.io/${{ env.IMAGE_GHCR_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
tags: |
|
|
||||||
# latest no
|
|
||||||
type=raw,value=latest,enable=false
|
|
||||||
|
|
||||||
# tag add arm64
|
|
||||||
# type=raw,enable=true,priority=1000,value=arm64
|
|
||||||
|
|
||||||
# dispatch add x1.x.x-arm64
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=300,prefix=,suffix=-arm64,value=${{ env.IMAGE_VERSION }}
|
|
||||||
|
|
||||||
# dispatch add arm64-development
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == true }},priority=300,prefix=,suffix=-arm64,value=development
|
|
||||||
|
|
||||||
# tag add tag-arm64
|
|
||||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=-arm64,event=tag
|
|
||||||
flavor: |
|
|
||||||
latest=false
|
|
||||||
labels: |
|
|
||||||
org.opencontainers.image.VERSION=${{ env.IMAGE_VERSION }}
|
|
||||||
org.opencontainers.image.BUILDDATE=${{ env.NOW_DOCKER_LABEL }}
|
|
||||||
org.opencontainers.image.licenses=MIT
|
|
||||||
org.opencontainers.image.revision=${{ github.sha }}
|
|
||||||
org.opencontainers.image.vendor=${{ env.IMAGE_GHCR_AUTHOR }}
|
|
||||||
org.opencontainers.image.ref.name=${{ env.ref_name }}
|
|
||||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Build and Push › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Build & Push (linux/arm64)'
|
|
||||||
id: task_release_gh_push
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
if: ( github.event_name == 'workflow_dispatch' && inputs.DRY_RUN == false ) || ( github.event_name == 'push' )
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: Dockerfile.aarch64
|
|
||||||
platforms: linux/arm64
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.task_release_gh_meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.task_release_gh_meta.outputs.labels }}
|
|
||||||
provenance: false
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Checkpoint › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚠️ Checkpoint'
|
|
||||||
id: task_release_gh_checkpoint
|
|
||||||
run: |
|
|
||||||
echo "registry ............. Github"
|
|
||||||
echo "github.actor.......... ${{ github.actor }}"
|
|
||||||
echo "github.ref ........... ${{ github.ref }}"
|
|
||||||
echo "github.ref_name ...... ${{ github.ref_name }}"
|
|
||||||
echo "github.event_name .... ${{ github.event_name }}"
|
|
||||||
echo "inputs.DRY_RUN ....... ${{ inputs.DRY_RUN }}"
|
|
||||||
echo "env.AUTHOR ........... ${{ env.IMAGE_GHCR_AUTHOR }}"
|
|
||||||
echo "tags ................. ${{ steps.task_release_gh_meta.outputs.tags }}"
|
|
||||||
echo "labels ............... ${{ steps.task_release_gh_meta.outputs.labels }}"
|
|
||||||
echo "docker image ......... ${{ env.DOCKER_IMAGE }}"
|
|
||||||
echo "docker sha ........... ${{ env.DOCKER_SHA }}"
|
|
||||||
echo "docker image id ...... ${{ steps.task_release_gh_push.outputs.imageid }}"
|
|
||||||
echo "docker digest ........ ${{ steps.task_release_gh_push.outputs.digest }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Weekly Commit List'
|
|
||||||
id: task_release_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Notify Github
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔔 Send Discord Webhook Message'
|
|
||||||
id: task_release_notifications_discord_send
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Docker › Deploy (Github) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
${{ inputs.DEV_RELEASE == true && '### ⚠️⚠️ Development / Pre-release ⚠️⚠️' || '' }}
|
|
||||||
|
|
||||||
A new version of the docker container `${{ env.IMAGE_NAME }}` has been released from Github to Github GHCR. The image is available at:
|
|
||||||
- https://github.com/${{ github.repository }}/pkgs/container/${{ env.IMAGE_NAME }}
|
|
||||||
|
|
||||||
- Release Type: `${{ inputs.DEV_RELEASE == true && '⚠️⚠️ Development / Pre-release ⚠️⚠️' || 'Stable' }}`
|
|
||||||
- Pull: `docker pull ghcr.io/${{ env.DOCKER_IMAGE }}:${{ inputs.DEV_RELEASE == true && 'development' || env.IMAGE_VERSION }}-arm64`
|
|
||||||
- Pull: `docker pull ghcr.io/${{ env.DOCKER_IMAGE }}@${{ steps.task_release_gh_push.outputs.digest }}`
|
|
||||||
- Dry Run: `${{ inputs.DRY_RUN }}`
|
|
||||||
- Source: `Github` https://github.com/${{ github.repository }}
|
|
||||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
- Version: `${{ env.IMAGE_VERSION }}`
|
|
||||||
- Branch: `${{ github.ref_name }}`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
### Tags
|
|
||||||
-# This docker image will use the following tags:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_gh_meta.outputs.tags }}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Labels
|
|
||||||
-# This docker image embeds the following labels:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_gh_meta.outputs.labels }}
|
|
||||||
```
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Docker Release › Github › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-docker-release-github-amd64:
|
|
||||||
name: >-
|
|
||||||
📦 Release › Github › Amd64
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 10
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
needs: [ job-docker-release-tags-create, job-docker-release-github-arm64 ]
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Start › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🏳️ Start'
|
|
||||||
id: task_release_gh_start
|
|
||||||
run: |
|
|
||||||
echo "Starting Github docker release"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Checkout › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '✅ Checkout'
|
|
||||||
id: task_release_gh_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Get Timestamp
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Timestamp'
|
|
||||||
id: task_release_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "DOCKER_IMAGE=`echo ${{github.repository}} | tr '[:upper:]' '[:lower:]'`" >> ${GITHUB_ENV}
|
|
||||||
echo "DOCKER_SHA=${GITHUB_SHA}" >> $GITHUB_ENV
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Install Dependencies
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Install Dependencies'
|
|
||||||
id: task_release_gh_dependencies
|
|
||||||
run:
|
|
||||||
sudo apt-get install -qq dos2unix
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Execute dos2unix
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔐 Apply dos2unix'
|
|
||||||
id: task_release_gh_dos2unix
|
|
||||||
run: |
|
|
||||||
find ./ \( -path "./.git" -o -path "./docs" -o -path "./.github" -o -path "*.png" -o -path "*.jpg" \) -prune -o -name '*' -print | xargs dos2unix --
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Fix Permissions
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '#️⃣ Manage Permissions'
|
|
||||||
id: task_release_gh_permissions
|
|
||||||
run: |
|
|
||||||
find ./ -name 'run' -exec chmod 755 {} \;
|
|
||||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
|
||||||
if [ -n "${WRONG_PERM}" ]; then
|
|
||||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
|
||||||
for i in ${WRONG_PERM}; do
|
|
||||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › QEMU › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Set up QEMU'
|
|
||||||
id: task_release_gh_qemu
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Setup BuildX › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Setup Buildx'
|
|
||||||
id: task_release_gh_buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
with:
|
|
||||||
version: latest
|
|
||||||
driver-opts: 'image=moby/buildkit:latest'
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Registry Login › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚙️ Login to Github'
|
|
||||||
id: task_release_gh_registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ env.IMAGE_GHCR_USERNAME }}
|
|
||||||
password: ${{ secrets.ORG_BINARYNINJA_TOKEN_CL }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Meta › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔨 Github: Meta - Amd64'
|
|
||||||
id: task_release_gh_meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
ghcr.io/${{ env.IMAGE_GHCR_AUTHOR }}/${{ env.IMAGE_NAME }}
|
|
||||||
tags: |
|
|
||||||
# latest yes
|
|
||||||
type=raw,value=latest,enable=${{ !inputs.DEV_RELEASE }}
|
|
||||||
|
|
||||||
# tag add amd64
|
|
||||||
# type=raw,enable=true,priority=1000,value=amd64
|
|
||||||
|
|
||||||
# dispatch add x1.x.x-amd64
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=300,prefix=,suffix=-amd64,value=${{ env.IMAGE_VERSION }}
|
|
||||||
|
|
||||||
# dispatch add amd64-development
|
|
||||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == true }},priority=300,prefix=,suffix=-amd64,value=development
|
|
||||||
|
|
||||||
# tag add tag-amd64
|
|
||||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=-amd64,event=tag
|
|
||||||
|
|
||||||
# add development tag to default architecture (amd64)
|
|
||||||
type=raw,enable=${{ inputs.DEV_RELEASE }},priority=400,prefix=,suffix=,value=development
|
|
||||||
flavor: |
|
|
||||||
latest=${{ !inputs.DEV_RELEASE }}
|
|
||||||
labels: |
|
|
||||||
org.opencontainers.image.VERSION=${{ env.IMAGE_VERSION }}
|
|
||||||
org.opencontainers.image.BUILDDATE=${{ env.NOW_DOCKER_LABEL }}
|
|
||||||
org.opencontainers.image.licenses=MIT
|
|
||||||
org.opencontainers.image.revision=${{ github.sha }}
|
|
||||||
org.opencontainers.image.vendor=${{ env.IMAGE_GHCR_AUTHOR }}
|
|
||||||
org.opencontainers.image.ref.name=${{ env.ref_name }}
|
|
||||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Build and Push › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '📦 Build & Push (linux/amd64)'
|
|
||||||
id: task_release_gh_push
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
if: ( github.event_name == 'workflow_dispatch' && inputs.DRY_RUN == false ) || ( github.event_name == 'push' )
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: Dockerfile
|
|
||||||
platforms: linux/amd64
|
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
|
||||||
tags: ${{ steps.task_release_gh_meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.task_release_gh_meta.outputs.labels }}
|
|
||||||
provenance: false
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Checkpoint › Amd64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '⚠️ Checkpoint'
|
|
||||||
id: task_release_gh_checkpoint
|
|
||||||
run: |
|
|
||||||
echo "registry ............. Github"
|
|
||||||
echo "github.actor.......... ${{ github.actor }}"
|
|
||||||
echo "github.ref ........... ${{ github.ref }}"
|
|
||||||
echo "github.ref_name ...... ${{ github.ref_name }}"
|
|
||||||
echo "github.event_name .... ${{ github.event_name }}"
|
|
||||||
echo "inputs.DRY_RUN ....... ${{ inputs.DRY_RUN }}"
|
|
||||||
echo "env.AUTHOR ........... ${{ env.IMAGE_GHCR_AUTHOR }}"
|
|
||||||
echo "tags ................. ${{ steps.task_release_gh_meta.outputs.tags }}"
|
|
||||||
echo "labels ............... ${{ steps.task_release_gh_meta.outputs.labels }}"
|
|
||||||
echo "docker image ......... ${{ env.DOCKER_IMAGE }}"
|
|
||||||
echo "docker sha ........... ${{ env.DOCKER_SHA }}"
|
|
||||||
echo "docker image id ...... ${{ steps.task_release_gh_push.outputs.imageid }}"
|
|
||||||
echo "docker digest ........ ${{ steps.task_release_gh_push.outputs.digest }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🕛 Get Weekly Commit List'
|
|
||||||
id: task_release_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Github › Notify Github
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: '🔔 Send Discord Webhook Message'
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_RELEASES }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Docker › Deploy (Github) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
${{ inputs.DEV_RELEASE == true && '### ⚠️⚠️ Development / Pre-release ⚠️⚠️' || '' }}
|
|
||||||
|
|
||||||
A new version of the docker container `${{ env.IMAGE_NAME }}` has been released from Github to Github GHCR. The image is available at:
|
|
||||||
- https://github.com/${{ github.repository }}/pkgs/container/${{ env.IMAGE_NAME }}
|
|
||||||
|
|
||||||
- Release Type: `${{ inputs.DEV_RELEASE == true && '⚠️⚠️ Development / Pre-release ⚠️⚠️' || 'Stable' }}`
|
|
||||||
- Pull: `docker pull ghcr.io/${{ env.DOCKER_IMAGE }}:${{ inputs.DEV_RELEASE == true && 'development' || env.IMAGE_VERSION }}-amd64`
|
|
||||||
- Pull: `docker pull ghcr.io/${{ env.DOCKER_IMAGE }}@${{ steps.task_release_gh_push.outputs.digest }}`
|
|
||||||
- Dry Run: `${{ inputs.DRY_RUN }}`
|
|
||||||
- Source: `Github` https://github.com/${{ github.repository }}
|
|
||||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
|
||||||
- Version: `${{ env.IMAGE_VERSION }}`
|
|
||||||
- Branch: `${{ github.ref_name }}`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
### Tags
|
|
||||||
-# This docker image will use the following tags:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_gh_meta.outputs.tags }}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Labels
|
|
||||||
-# This docker image embeds the following labels:
|
|
||||||
|
|
||||||
```
|
|
||||||
${{ steps.task_release_gh_meta.outputs.labels }}
|
|
||||||
```
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
516
.github/workflows/deploy-docker.yml
vendored
Normal file
@@ -0,0 +1,516 @@
|
|||||||
|
# #
|
||||||
|
# @type github workflow
|
||||||
|
# @desc deploys docker container
|
||||||
|
# @author Aetherinox
|
||||||
|
# @url https://github.com/Aetherinox
|
||||||
|
# #
|
||||||
|
|
||||||
|
name: "⚙️ Deploy › Docker › Main"
|
||||||
|
run-name: "⚙️ Deploy › Docker › Main"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# triggers
|
||||||
|
# #
|
||||||
|
|
||||||
|
on:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Trigger > Workflow Dispatch
|
||||||
|
# #
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
|
||||||
|
IMAGE_NAME:
|
||||||
|
description: "📦 Image Name"
|
||||||
|
required: true
|
||||||
|
default: 'thetvapp-docker'
|
||||||
|
type: string
|
||||||
|
|
||||||
|
IMAGE_AUTHOR:
|
||||||
|
description: "📦 Image Author"
|
||||||
|
required: true
|
||||||
|
default: 'aetherinox'
|
||||||
|
type: string
|
||||||
|
|
||||||
|
# #
|
||||||
|
# true: runs all actions, even ones not scheduled
|
||||||
|
# false: only scheduled tasks will run
|
||||||
|
# #
|
||||||
|
|
||||||
|
PRINT_ONLY:
|
||||||
|
description: "📑 Print Debugs Only"
|
||||||
|
required: true
|
||||||
|
default: false
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Trigger > Push
|
||||||
|
# #
|
||||||
|
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
# #
|
||||||
|
# environment variables
|
||||||
|
# #
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: alpine-base
|
||||||
|
IMAGE_AUTHOR: Aetherinox
|
||||||
|
BOT_NAME_1: EuropaServ
|
||||||
|
BOT_NAME_DEPENDABOT: dependabot[bot]
|
||||||
|
|
||||||
|
# #
|
||||||
|
# jobs
|
||||||
|
#
|
||||||
|
# The way pushed docker containers on Github work, the most recent image built goes at the top.
|
||||||
|
# We will use the order below which builds the :latest image last so that it appears at the very
|
||||||
|
# top of the packages page.
|
||||||
|
# #
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Job > Docker Release > Github
|
||||||
|
# #
|
||||||
|
|
||||||
|
job-docker-release-github-php:
|
||||||
|
name: >-
|
||||||
|
📦 Release › Github › PHP
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
attestations: write
|
||||||
|
id-token: write
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Start
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "✅ Start"
|
||||||
|
id: task_release_gh_start
|
||||||
|
run: |
|
||||||
|
echo "Starting Github docker release for image PHP"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Checkout
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "☑️ Checkout"
|
||||||
|
id: task_release_gh_checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > QEMU
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Set up QEMU"
|
||||||
|
id: task_release_gh_qemu
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Setup BuildX
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Setup Buildx"
|
||||||
|
id: task_release_gh_buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
version: latest
|
||||||
|
driver-opts: 'image=moby/buildkit:v0.10.5'
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Registry Login
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Login to Github"
|
||||||
|
id: task_release_gh_registry
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.SELF_TOKEN_CL }}
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Meta
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "🔨 Docker meta"
|
||||||
|
id: task_release_gh_meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/${{ inputs.IMAGE_AUTHOR || env.IMAGE_AUTHOR }}/docker-${{ inputs.IMAGE_NAME || env.IMAGE_NAME }}
|
||||||
|
tags: |
|
||||||
|
type=ref,enable=true,priority=600,prefix=,suffix=-php,event=tag
|
||||||
|
flavor: |
|
||||||
|
latest=false
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Debug
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "🪪 Debug › Print"
|
||||||
|
id: task_release_gh_print
|
||||||
|
run: |
|
||||||
|
echo "registry ............. Github"
|
||||||
|
echo "github.actor.......... ${{ github.actor }}"
|
||||||
|
echo "github.ref ........... ${{ github.ref }}"
|
||||||
|
echo "github.event_name .... ${{ github.event_name }}"
|
||||||
|
echo "tags ................. ${{ steps.task_release_gh_meta.outputs.tags }}"
|
||||||
|
echo "labels ............... ${{ steps.task_release_gh_meta.outputs.labels }}"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Build and Push
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "📦 Build and push"
|
||||||
|
id: task_release_gh_push
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
if: ( github.event_name == 'workflow_dispatch' && inputs.PRINT_ONLY == 'false' ) || ( github.event_name == 'push' )
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: Dockerfile-php.template
|
||||||
|
platforms: linux/amd64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.task_release_gh_meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.task_release_gh_meta.outputs.labels }}
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Job > Docker Release > Github
|
||||||
|
# #
|
||||||
|
|
||||||
|
job-docker-release-dockerhub-php:
|
||||||
|
name: >-
|
||||||
|
📦 Release › Dockerhub › PHP
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
attestations: write
|
||||||
|
id-token: write
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Start
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "✅ Start"
|
||||||
|
id: task_release_dh_start
|
||||||
|
run: |
|
||||||
|
echo "Starting Dockerhub Release"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Checkout
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "☑️ Checkout"
|
||||||
|
id: task_release_dh_checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > QEMU
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Set up QEMU"
|
||||||
|
id: task_release_dh_qemu
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Setup BuildX
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Setup Buildx"
|
||||||
|
id: task_release_dh_buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
version: latest
|
||||||
|
driver-opts: 'image=moby/buildkit:v0.10.5'
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Registry Login
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Login to DockerHub"
|
||||||
|
id: task_release_dh_registry
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ inputs.IMAGE_AUTHOR || env.IMAGE_AUTHOR }}
|
||||||
|
password: ${{ secrets.SELF_DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Meta
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "🔨 Docker meta"
|
||||||
|
id: task_release_dh_meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
${{ inputs.IMAGE_AUTHOR || env.IMAGE_AUTHOR }}/${{ inputs.IMAGE_NAME || env.IMAGE_NAME }}
|
||||||
|
tags: |
|
||||||
|
type=raw,value=latest,enable=false
|
||||||
|
type=ref,enable=true,priority=600,prefix=,suffix=-php,event=tag
|
||||||
|
flavor: |
|
||||||
|
latest=false
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Debug
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "🪪 Debug › Print"
|
||||||
|
id: task_release_dh_print
|
||||||
|
run: |
|
||||||
|
echo "registry ............. Dockerhub"
|
||||||
|
echo "github.actor.......... ${{ github.actor }}"
|
||||||
|
echo "github.ref ........... ${{ github.ref }}"
|
||||||
|
echo "github.event_name .... ${{ github.event_name }}"
|
||||||
|
echo "tags ................. ${{ steps.task_release_dh_meta.outputs.tags }}"
|
||||||
|
echo "labels ............... ${{ steps.task_release_dh_meta.outputs.labels }}"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Build and Push
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "📦 Build and push"
|
||||||
|
id: task_release_dh_push
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
if: ( github.event_name == 'workflow_dispatch' && inputs.PRINT_ONLY == 'false' ) || ( github.event_name == 'push' )
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: Dockerfile-php.template
|
||||||
|
platforms: linux/amd64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.task_release_dh_meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.task_release_dh_meta.outputs.labels }}
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Job > Docker Release > Github
|
||||||
|
# #
|
||||||
|
|
||||||
|
job-docker-release-github-main:
|
||||||
|
name: >-
|
||||||
|
📦 Release › Github › Main
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
attestations: write
|
||||||
|
id-token: write
|
||||||
|
needs: [ job-docker-release-github-php, job-docker-release-dockerhub-php ]
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Start
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "✅ Start"
|
||||||
|
id: task_release_gh_start
|
||||||
|
run: |
|
||||||
|
echo "Starting Github docker release"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Checkout
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "☑️ Checkout"
|
||||||
|
id: task_release_gh_checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > QEMU
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Set up QEMU"
|
||||||
|
id: task_release_gh_qemu
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Setup BuildX
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Setup Buildx"
|
||||||
|
id: task_release_gh_buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
version: latest
|
||||||
|
driver-opts: 'image=moby/buildkit:v0.10.5'
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Registry Login
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Login to Github"
|
||||||
|
id: task_release_gh_registry
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.SELF_TOKEN_CL }}
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Meta
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "🔨 Docker meta"
|
||||||
|
id: task_release_gh_meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/${{ inputs.IMAGE_AUTHOR || env.IMAGE_AUTHOR }}/docker-${{ inputs.IMAGE_NAME || env.IMAGE_NAME }}
|
||||||
|
tags: |
|
||||||
|
type=raw,value=latest,enable=${{ endsWith(github.ref, 'main') }}
|
||||||
|
type=ref,event=tag
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Debug
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "🪪 Debug › Print"
|
||||||
|
id: task_release_gh_print
|
||||||
|
run: |
|
||||||
|
echo "registry ............. Github"
|
||||||
|
echo "github.actor.......... ${{ github.actor }}"
|
||||||
|
echo "github.ref ........... ${{ github.ref }}"
|
||||||
|
echo "github.event_name .... ${{ github.event_name }}"
|
||||||
|
echo "tags ................. ${{ steps.task_release_gh_meta.outputs.tags }}"
|
||||||
|
echo "labels ............... ${{ steps.task_release_gh_meta.outputs.labels }}"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Github > Build and Push
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "📦 Build and push"
|
||||||
|
id: task_release_gh_push
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
if: ( github.event_name == 'workflow_dispatch' && inputs.PRINT_ONLY == 'false' ) || ( github.event_name == 'push' )
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: Dockerfile
|
||||||
|
platforms: linux/amd64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.task_release_gh_meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.task_release_gh_meta.outputs.labels }}
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Job > Docker Release > Github
|
||||||
|
# #
|
||||||
|
|
||||||
|
job-docker-release-dockerhub-main:
|
||||||
|
name: >-
|
||||||
|
📦 Release › Dockerhub › Main
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
attestations: write
|
||||||
|
id-token: write
|
||||||
|
needs: [ job-docker-release-github-php, job-docker-release-dockerhub-php ]
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Start
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "✅ Start"
|
||||||
|
id: task_release_dh_start
|
||||||
|
run: |
|
||||||
|
echo "Starting Github docker release"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Checkout
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "☑️ Checkout"
|
||||||
|
id: task_release_dh_checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > QEMU
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Set up QEMU"
|
||||||
|
id: task_release_dh_qemu
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Setup BuildX
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Setup Buildx"
|
||||||
|
id: task_release_dh_buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
version: latest
|
||||||
|
driver-opts: 'image=moby/buildkit:v0.10.5'
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Registry Login
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "⚙️ Login to DockerHub"
|
||||||
|
id: task_release_dh_registry
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ inputs.IMAGE_AUTHOR || env.IMAGE_AUTHOR }}
|
||||||
|
password: ${{ secrets.SELF_DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Meta
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "🔨 Docker meta"
|
||||||
|
id: task_release_dh_meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
${{ inputs.IMAGE_AUTHOR || env.IMAGE_AUTHOR }}/${{ inputs.IMAGE_NAME || env.IMAGE_NAME }}
|
||||||
|
tags: |
|
||||||
|
type=raw,value=latest,enable=${{ endsWith(github.ref, 'main') }}
|
||||||
|
type=ref,event=tag
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Debug
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "🪪 Debug › Print"
|
||||||
|
id: task_release_dh_print
|
||||||
|
run: |
|
||||||
|
echo "registry ............. Dockerhub"
|
||||||
|
echo "github.actor.......... ${{ github.actor }}"
|
||||||
|
echo "github.ref ........... ${{ github.ref }}"
|
||||||
|
echo "github.event_name .... ${{ github.event_name }}"
|
||||||
|
echo "tags ................. ${{ steps.task_release_dh_meta.outputs.tags }}"
|
||||||
|
echo "labels ............... ${{ steps.task_release_dh_meta.outputs.labels }}"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Release > Dockerhub > Build and Push
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "📦 Build & Push"
|
||||||
|
id: task_release_dh_push
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
if: ( github.event_name == 'workflow_dispatch' && inputs.PRINT_ONLY == 'false' ) || ( github.event_name == 'push' )
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: Dockerfile
|
||||||
|
platforms: linux/amd64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.task_release_dh_meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.task_release_dh_meta.outputs.labels }}
|
||||||
207
.github/workflows/documentation.yml
vendored
@@ -1,207 +0,0 @@
|
|||||||
# #
|
|
||||||
# @type github workflow
|
|
||||||
# @desc builds mkdocs from the main branch /docs/ folder and puts the compiled version
|
|
||||||
# in the `gh-pages` branch. Is hosted using Github Pages.
|
|
||||||
#
|
|
||||||
# @update pip install --upgrade mkdocs
|
|
||||||
# pip install --upgrade --force-reinstall mkdocs-material
|
|
||||||
#
|
|
||||||
# @author Aetherinox
|
|
||||||
# @url https://github.com/Aetherinox
|
|
||||||
#
|
|
||||||
# @secrets secrets.SELF_TOKEN_CL Github Access Token (Classic)
|
|
||||||
# secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_WORKfLOWS Discord Webbhook URL; right-click on channel, click "Integrations"
|
|
||||||
# #
|
|
||||||
|
|
||||||
name: "📒 Docs › Build"
|
|
||||||
run-name: "📒 Docs › Build"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# triggers
|
|
||||||
# #
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- published
|
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- docs/**
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 */12 * * *"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# environment variables
|
|
||||||
# #
|
|
||||||
|
|
||||||
env:
|
|
||||||
ASSIGN_USER: Aetherinox
|
|
||||||
BOT_NAME_1: EuropaServ
|
|
||||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
|
||||||
|
|
||||||
# #
|
|
||||||
# jobs
|
|
||||||
# #
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-docs:
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 20
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pages: write
|
|
||||||
environment:
|
|
||||||
name: Orion
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Documentation › Checkout › Arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
✅ Checkout
|
|
||||||
id: task_docs_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Documentation › Set Env Variables
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Timestamp
|
|
||||||
id: task_docs_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Documentation › Setup Python
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🐍 Setup Python"
|
|
||||||
id: task_docs_python_setup
|
|
||||||
uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: 3.x
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Documentation › Build Documentation
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
📕 Build Documentation
|
|
||||||
id: task_docs_build
|
|
||||||
run: |
|
|
||||||
export DOCS_NAME=${{ secrets.DOCS_NAME || 'TVApp2' }}
|
|
||||||
export DOCS_SECRET_L1=${{ secrets.DOCS_SECRET_L1 }}
|
|
||||||
export DOCS_SECRET_L2=${{ secrets.DOCS_SECRET_L2 }}
|
|
||||||
export GH_TOKEN=${{ secrets.ADMINSERV_TOKEN }}
|
|
||||||
|
|
||||||
pip install mkdocs
|
|
||||||
pip install mkdocs-material
|
|
||||||
pip install mike
|
|
||||||
pip install mkdocs-git-committers-plugin-2
|
|
||||||
pip install mkdocs-encryptcontent-plugin
|
|
||||||
pip install mkdocs-redirects mkdocs-glightbox pymdown-extensions mkdocs-git-revision-date-localized-plugin mkdocs-git-authors-plugin mkdocs-link-embeds-plugin
|
|
||||||
cd docs
|
|
||||||
mkdocs build
|
|
||||||
dir
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.ADMINSERV_TOKEN }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Documentation › Deploy
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "💽 Deploy"
|
|
||||||
id: task_docs_deploy
|
|
||||||
uses: peaceiris/actions-gh-pages@v4
|
|
||||||
with:
|
|
||||||
personal_token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
|
||||||
publish_dir: ./docs/site
|
|
||||||
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Documentation › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Weekly Commit List
|
|
||||||
id: task_docs_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Documentation › Notify Github › Success
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🔔 Send Discord Webhook Message (Success)
|
|
||||||
id: task_docs_notify_discord_success
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_WORKfLOWS }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Documentation Deployment${{ job.status == 'success' && '✅' || '❌' }}
|
|
||||||
|
|
||||||
A **successful** deployment of TVApp2 documentation has been completed. Changes to documentation will appear in the next 5 minutes.
|
|
||||||
|
|
||||||
- Documentation: https://thebinaryninja.github.io/tvapp2/
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Documentation › Notify Github › Failure
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🔔 Send Discord Webhook Message (Failure)
|
|
||||||
id: task_docs_notify_discord_failure
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: failure()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_GITHUB_TVAPP2_WORKfLOWS }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 📦 Documentation Deployment${{ job.status == 'success' && '✅' || '❌' }}
|
|
||||||
|
|
||||||
A **failed** attempt to build the new documentation has triggered. No changes to your documentation will be made until the errors are fixed in the workflow.
|
|
||||||
|
|
||||||
- Documentation: https://thebinaryninja.github.io/tvapp2/
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
72
.github/workflows/issues-accept.yml
vendored
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
# #
|
||||||
|
# @type github workflow
|
||||||
|
# @desc adds a label to a PR when the command "/accept" is typed in the issue comments
|
||||||
|
# do not attempt to use env variables in if condition.
|
||||||
|
# do not accept to change GITHUB_TOKEN.
|
||||||
|
# @author Aetherinox
|
||||||
|
# @url https://github.com/Aetherinox
|
||||||
|
# #
|
||||||
|
|
||||||
|
name: "🎫 Issue › Accept"
|
||||||
|
run-name: "🎫 Issue › Accept"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# triggers
|
||||||
|
# #
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
# #
|
||||||
|
# environment variables
|
||||||
|
# #
|
||||||
|
|
||||||
|
env:
|
||||||
|
LABEL_ACCEPT: "Status 𐄂 Accepted"
|
||||||
|
|
||||||
|
BOT_NAME_1: AdminServ
|
||||||
|
BOT_NAME_2: AdminServX
|
||||||
|
BOT_NAME_3: EuropaServ
|
||||||
|
BOT_NAME_DEPENDABOT: dependabot[bot]
|
||||||
|
|
||||||
|
# #
|
||||||
|
# jobs
|
||||||
|
# #
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Job [ Deploy ]
|
||||||
|
# #
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
if: contains(github.event.comment.body, '/accept') && github.event.comment.user.login == 'Aetherinox'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Add Label to accepted PR
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: >-
|
||||||
|
🏷️ Assign Label › ${{ env.LABEL_ACCEPT }}
|
||||||
|
run: gh issue edit "$NUMBER" --add-label "$LABELS"
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
GH_REPO: ${{ github.repository }}
|
||||||
|
NUMBER: ${{ github.event.issue.number }}
|
||||||
|
LABELS: ${{ env.LABEL_ACCEPT }}
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Add assignee to accepted PR
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: >-
|
||||||
|
🏷️ Assign Assignee › ${{ github.repository_owner }}
|
||||||
|
run: gh issue edit "$NUMBER" --add-assignee "$ASSIGNEE"
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
GH_REPO: ${{ github.repository }}
|
||||||
|
NUMBER: ${{ github.event.issue.number }}
|
||||||
|
ASSIGNEE: ${{ github.repository_owner }}
|
||||||
89
.github/workflows/issues-new.yml
vendored
Executable file → Normal file
@@ -50,7 +50,9 @@ env:
|
|||||||
LABEL_INTERNAL: "Type ◦ Git Action"
|
LABEL_INTERNAL: "Type ◦ Git Action"
|
||||||
LABEL_URGENT: "⚠ Urgent"
|
LABEL_URGENT: "⚠ Urgent"
|
||||||
|
|
||||||
BOT_NAME_1: EuropaServ
|
BOT_NAME_1: AdminServ
|
||||||
|
BOT_NAME_2: AdminServX
|
||||||
|
BOT_NAME_3: EuropaServ
|
||||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
BOT_NAME_DEPENDABOT: dependabot[bot]
|
||||||
|
|
||||||
LABELS_JSON: |
|
LABELS_JSON: |
|
||||||
@@ -131,9 +133,7 @@ jobs:
|
|||||||
job-labels-create:
|
job-labels-create:
|
||||||
name: >-
|
name: >-
|
||||||
🎫 Labels › Verify Existing
|
🎫 Labels › Verify Existing
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
# #
|
# #
|
||||||
@@ -204,9 +204,7 @@ jobs:
|
|||||||
🏷️ Labels › Assign
|
🏷️ Labels › Assign
|
||||||
needs:
|
needs:
|
||||||
- job-labels-create
|
- job-labels-create
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: 'read'
|
contents: 'read'
|
||||||
id-token: 'write'
|
id-token: 'write'
|
||||||
@@ -306,7 +304,7 @@ jobs:
|
|||||||
const bug_bFoundPRTitle = Boolean( bug_findPRTitle.test( iss_title ) );
|
const bug_bFoundPRTitle = Boolean( bug_findPRTitle.test( iss_title ) );
|
||||||
|
|
||||||
console.log( "Title Lowercase ............... " + iss_title_lc )
|
console.log( "Title Lowercase ............... " + iss_title_lc )
|
||||||
console.log( "Startswith " + bug_tag.toLowerCase( ) + "................ " + iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) )
|
console.log( "Startswith " + bug_tag.toLowerCase( ) + "................ " + iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) )
|
||||||
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
||||||
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
||||||
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
||||||
@@ -317,14 +315,14 @@ jobs:
|
|||||||
- Check if title contains word in words
|
- Check if title contains word in words
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ( iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
if ( iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
||||||
{
|
{
|
||||||
|
|
||||||
console.log( "⚠️ " + bug_tag + " ---------------------------------------" )
|
console.log( "⚠️ " + bug_tag + " ---------------------------------------" )
|
||||||
console.log( "Already starts with " + bug_tag + " ......... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + bug_tag + " ......... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + feat_tag + " ..... " + iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + feat_tag + " ..... " + iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + urgn_tag + " ...... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + urgn_tag + " ...... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + road_tag + " ..... " + iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + road_tag + " ..... " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
|
|
||||||
add_labels.push( `${ bug_lbl }` );
|
add_labels.push( `${ bug_lbl }` );
|
||||||
|
|
||||||
@@ -337,7 +335,7 @@ jobs:
|
|||||||
// Rename title to contain Bug:
|
// Rename title to contain Bug:
|
||||||
// Make sure issue / pr title doesnt already contain a beginning title tag
|
// Make sure issue / pr title doesnt already contain a beginning title tag
|
||||||
|
|
||||||
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !bug_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) )
|
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !bug_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
{
|
{
|
||||||
console.log( "Renaming Title" )
|
console.log( "Renaming Title" )
|
||||||
console.log( `Old Title: .................. ${ iss_title }` )
|
console.log( `Old Title: .................. ${ iss_title }` )
|
||||||
@@ -435,7 +433,7 @@ jobs:
|
|||||||
const feat_bFoundPRTitle = Boolean( feat_findPRTitle.test( iss_title ) );
|
const feat_bFoundPRTitle = Boolean( feat_findPRTitle.test( iss_title ) );
|
||||||
|
|
||||||
console.log( "Title Lowercase ............... " + iss_title_lc )
|
console.log( "Title Lowercase ............... " + iss_title_lc )
|
||||||
console.log( "Startswith " + feat_tag.toLowerCase( ) + "............ " + iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) )
|
console.log( "Startswith " + feat_tag.toLowerCase( ) + "............ " + iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) )
|
||||||
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
||||||
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
||||||
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
||||||
@@ -447,14 +445,14 @@ jobs:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// change TAG per category
|
// change TAG per category
|
||||||
if ( iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
if ( iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
||||||
{
|
{
|
||||||
|
|
||||||
console.log( "⚠️ " + feat_tag + " ---------------------------------------" )
|
console.log( "⚠️ " + feat_tag + " ---------------------------------------" )
|
||||||
console.log( "Already starts with " + bug_tag + " ......... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + bug_tag + " ......... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + feat_tag + " ..... " + iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + feat_tag + " ..... " + iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + urgn_tag + " ...... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + urgn_tag + " ...... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + road_tag + " ..... " + iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + road_tag + " ..... " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
|
|
||||||
// change LBL per category
|
// change LBL per category
|
||||||
add_labels.push( `${ feat_lbl }` );
|
add_labels.push( `${ feat_lbl }` );
|
||||||
@@ -468,7 +466,7 @@ jobs:
|
|||||||
// Rename title to contain Feature:
|
// Rename title to contain Feature:
|
||||||
// Make sure issue / pr title doesnt already contain a beginning title tag
|
// Make sure issue / pr title doesnt already contain a beginning title tag
|
||||||
|
|
||||||
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !feat_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) )
|
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !feat_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
{
|
{
|
||||||
console.log( "Renaming Title" )
|
console.log( "Renaming Title" )
|
||||||
console.log( `Old Title: .................. ${ iss_title }` )
|
console.log( `Old Title: .................. ${ iss_title }` )
|
||||||
@@ -566,7 +564,7 @@ jobs:
|
|||||||
const urgn_bFoundPRTitle = Boolean( urgn_findPRTitle.test( iss_title ) );
|
const urgn_bFoundPRTitle = Boolean( urgn_findPRTitle.test( iss_title ) );
|
||||||
|
|
||||||
console.log( "Title Lowercase ............... " + iss_title_lc )
|
console.log( "Title Lowercase ............... " + iss_title_lc )
|
||||||
console.log( "Startswith " + urgn_tag.toLowerCase( ) + "............. " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) )
|
console.log( "Startswith " + urgn_tag.toLowerCase( ) + "............. " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) )
|
||||||
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
||||||
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
||||||
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
||||||
@@ -578,14 +576,14 @@ jobs:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// change TAG per category
|
// change TAG per category
|
||||||
if ( iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
if ( iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
||||||
{
|
{
|
||||||
|
|
||||||
console.log( "⚠️ " + urgn_tag + " ---------------------------------------" )
|
console.log( "⚠️ " + urgn_tag + " ---------------------------------------" )
|
||||||
console.log( "Already starts with " + bug_tag + " ......... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + bug_tag + " ......... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + feat_tag + " ..... " + iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + feat_tag + " ..... " + iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + urgn_tag + " ...... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + urgn_tag + " ...... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + road_tag + " ..... " + iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + road_tag + " ..... " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
|
|
||||||
// change LBL per category
|
// change LBL per category
|
||||||
add_labels.push( `${ urgn_lbl }` );
|
add_labels.push( `${ urgn_lbl }` );
|
||||||
@@ -599,7 +597,7 @@ jobs:
|
|||||||
// Rename title to contain Urgent:
|
// Rename title to contain Urgent:
|
||||||
// Make sure issue / pr title doesnt already contain a beginning title tag
|
// Make sure issue / pr title doesnt already contain a beginning title tag
|
||||||
|
|
||||||
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !urgn_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) )
|
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !urgn_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
{
|
{
|
||||||
console.log( "Renaming Title" )
|
console.log( "Renaming Title" )
|
||||||
console.log( `Old Title: .................. ${ iss_title }` )
|
console.log( `Old Title: .................. ${ iss_title }` )
|
||||||
@@ -684,7 +682,7 @@ jobs:
|
|||||||
https://regex101.com/r/ucajBZ/1
|
https://regex101.com/r/ucajBZ/1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const findWordList = /#\s*Summary[\S\s]+#\s*(?:Proposal|Objective)[^\]]+/igm;
|
const findWordList = /#\s*Summary[\S\s]+#\s*(?:Proposal|Objective)[^\]]+/igm;
|
||||||
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
const bFoundMatchTitle = Boolean( findWordList.test( iss_title ) );
|
||||||
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
const bFoundMatchBody = Boolean( findWordList.test( iss_body ) );
|
||||||
|
|
||||||
@@ -699,7 +697,7 @@ jobs:
|
|||||||
const road_bFoundPRTitle = Boolean( road_findPRTitle.test( iss_title ) );
|
const road_bFoundPRTitle = Boolean( road_findPRTitle.test( iss_title ) );
|
||||||
|
|
||||||
console.log( "Title Lowercase ............... " + iss_title_lc )
|
console.log( "Title Lowercase ............... " + iss_title_lc )
|
||||||
console.log( "Startswith " + road_tag.toLowerCase( ) + "............ " + iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) )
|
console.log( "Startswith " + road_tag.toLowerCase( ) + "............ " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
console.log( "Title Includes Keyword ........ " + bTriggerWordInTitle )
|
||||||
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
console.log( "Title Includes Regex .......... " + bFoundMatchTitle )
|
||||||
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
console.log( "Body Includes Regex ........... " + bFoundMatchBody )
|
||||||
@@ -711,14 +709,14 @@ jobs:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// change TAG per category
|
// change TAG per category
|
||||||
if ( iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
if ( iss_title_lc.startsWith( road_tag.toLowerCase( ) ) || bTriggerWordInTitle || bFoundMatchTitle || bFoundMatchBody )
|
||||||
{
|
{
|
||||||
|
|
||||||
console.log( "⚠️ " + road_tag + " ---------------------------------------" )
|
console.log( "⚠️ " + road_tag + " ---------------------------------------" )
|
||||||
console.log( "Already starts with " + bug_tag + " ...... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + bug_tag + " ...... " + iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + feat_tag + " .. " + iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + feat_tag + " .. " + iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + urgn_tag + " ... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + urgn_tag + " ... " + iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) )
|
||||||
console.log( "Already starts with " + road_tag + " .. " + iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) )
|
console.log( "Already starts with " + road_tag + " .. " + iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
|
|
||||||
// change LBL per category
|
// change LBL per category
|
||||||
add_labels.push( `${ road_lbl }` );
|
add_labels.push( `${ road_lbl }` );
|
||||||
@@ -732,7 +730,7 @@ jobs:
|
|||||||
// Rename title to contain Roadmap:
|
// Rename title to contain Roadmap:
|
||||||
// Make sure issue / pr title doesnt already contain a beginning title tag
|
// Make sure issue / pr title doesnt already contain a beginning title tag
|
||||||
|
|
||||||
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !road_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ), 3 ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ), 3 ) )
|
if ( iss_author !== `${{ env.BOT_NAME_DEPENDABOT }}` && !road_bFoundPRTitle && !iss_title_lc.startsWith( bug_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( feat_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( urgn_tag.toLowerCase( ) ) && !iss_title_lc.startsWith( road_tag.toLowerCase( ) ) )
|
||||||
{
|
{
|
||||||
console.log( "Renaming Title" )
|
console.log( "Renaming Title" )
|
||||||
console.log( `Old Title: .................. ${ iss_title }` )
|
console.log( `Old Title: .................. ${ iss_title }` )
|
||||||
@@ -767,9 +765,7 @@ jobs:
|
|||||||
🏷️ Labels › Phrase Search
|
🏷️ Labels › Phrase Search
|
||||||
needs:
|
needs:
|
||||||
- job-labels-create
|
- job-labels-create
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: 'read'
|
contents: 'read'
|
||||||
id-token: 'write'
|
id-token: 'write'
|
||||||
@@ -854,17 +850,12 @@ jobs:
|
|||||||
job-assign-assignees:
|
job-assign-assignees:
|
||||||
name: >-
|
name: >-
|
||||||
✍️ Issue › Assignees
|
✍️ Issue › Assignees
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
needs: [ job-assign-labels ]
|
needs: [ job-assign-labels ]
|
||||||
# disable
|
if: |
|
||||||
#
|
always()
|
||||||
# if: |
|
&& contains( needs.*.result, 'success' )
|
||||||
# always()
|
&& !contains( needs.*.result, 'failure' )
|
||||||
# && contains( needs.*.result, 'success' )
|
|
||||||
# && !contains( needs.*.result, 'failure' )
|
|
||||||
if: false
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
1367
.github/workflows/issues-scan.yml
vendored
Executable file → Normal file
21
.github/workflows/issues-stale.yml
vendored
Executable file → Normal file
@@ -141,9 +141,7 @@ jobs:
|
|||||||
job-labels-create:
|
job-labels-create:
|
||||||
name: >-
|
name: >-
|
||||||
🎫 Labels › Verify Existing
|
🎫 Labels › Verify Existing
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
# #
|
# #
|
||||||
@@ -218,9 +216,7 @@ jobs:
|
|||||||
job-issues-nolabel:
|
job-issues-nolabel:
|
||||||
name: >-
|
name: >-
|
||||||
🎫 Labels › Assign Missing
|
🎫 Labels › Assign Missing
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
needs: job-labels-create
|
needs: job-labels-create
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
@@ -587,9 +583,7 @@ jobs:
|
|||||||
job-issues-stale:
|
job-issues-stale:
|
||||||
name: >-
|
name: >-
|
||||||
💤 Check › Stale
|
💤 Check › Stale
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
needs:
|
needs:
|
||||||
- job-labels-create
|
- job-labels-create
|
||||||
- job-issues-nolabel
|
- job-issues-nolabel
|
||||||
@@ -609,7 +603,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
repo-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
||||||
stale-issue-message: |
|
stale-issue-message: |
|
||||||
⚠️ It looks like there hasn't been any recent updates on this issue. If you created this issue and no longer consider it open, then please login to github and close the issue.
|
⚠️ It looks like there hasn't been any recent updates on this issue. If you created this issue and no longer consider it
|
||||||
|
open, then please login to github and close the issue.
|
||||||
|
|
||||||
If there is no further activity on this issue, it will be automatically closed in the next week.
|
If there is no further activity on this issue, it will be automatically closed in the next week.
|
||||||
|
|
||||||
@@ -619,7 +614,7 @@ jobs:
|
|||||||
stale-issue-label: 'Status 𐄂 Stale'
|
stale-issue-label: 'Status 𐄂 Stale'
|
||||||
close-issue-label: 'Status 𐄂 Autoclosed'
|
close-issue-label: 'Status 𐄂 Autoclosed'
|
||||||
exempt-issue-labels: 'Status 𐄂 Accepted,Status 𐄂 Review,Status 𐄂 Pending,Type ◦ Bug,Type ◦ Dependency,Type ◦ Docs,Type ◦ Feature,Type ◦ Git Action,Type ◦ Pull Request,Type ◦ Roadmap'
|
exempt-issue-labels: 'Status 𐄂 Accepted,Status 𐄂 Review,Status 𐄂 Pending,Type ◦ Bug,Type ◦ Dependency,Type ◦ Docs,Type ◦ Feature,Type ◦ Git Action,Type ◦ Pull Request,Type ◦ Roadmap'
|
||||||
days-before-stale: 60
|
days-before-stale: 14
|
||||||
days-before-close: 7
|
days-before-close: 7
|
||||||
days-before-pr-stale: -1
|
days-before-pr-stale: -1
|
||||||
days-before-pr-close: -1
|
days-before-pr-close: -1
|
||||||
@@ -631,9 +626,7 @@ jobs:
|
|||||||
job-issues-lock:
|
job-issues-lock:
|
||||||
name: >-
|
name: >-
|
||||||
🔒 Check › Inactive
|
🔒 Check › Inactive
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
needs:
|
needs:
|
||||||
- job-labels-create
|
- job-labels-create
|
||||||
- job-issues-nolabel
|
- job-issues-nolabel
|
||||||
|
|||||||
119
.github/workflows/labels-clean.yml → .github/workflows/labels-clean..yml
vendored
Executable file → Normal file
@@ -29,15 +29,6 @@ env:
|
|||||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
BOT_NAME_DEPENDABOT: dependabot[bot]
|
||||||
LABELS_JSON: |
|
LABELS_JSON: |
|
||||||
[
|
[
|
||||||
{ "name": "bug", "color": "8F1784", "description": "Default github label" },
|
|
||||||
{ "name": "documentation", "color": "8F1784", "description": "Default github label" },
|
|
||||||
{ "name": "duplicate", "color": "8F1784", "description": "Default github label" },
|
|
||||||
{ "name": "enhancement", "color": "8F1784", "description": "Default github label" },
|
|
||||||
{ "name": "good first issue", "color": "8F1784", "description": "Default github label" },
|
|
||||||
{ "name": "help wanted", "color": "8F1784", "description": "Default github label" },
|
|
||||||
{ "name": "invalid", "color": "8F1784", "description": "Default github label" },
|
|
||||||
{ "name": "question", "color": "8F1784", "description": "Default github label" },
|
|
||||||
{ "name": "wontfix", "color": "8F1784", "description": "Default github label" },
|
|
||||||
{ "name": "AC › Changes Made", "color": "8F1784", "description": "Requested changes have been made and are pending a re-scan" },
|
{ "name": "AC › Changes Made", "color": "8F1784", "description": "Requested changes have been made and are pending a re-scan" },
|
||||||
{ "name": "AC › Changes Required", "color": "8F1784", "description": "Requires changes to be made to the package before being accepted" },
|
{ "name": "AC › Changes Required", "color": "8F1784", "description": "Requires changes to be made to the package before being accepted" },
|
||||||
{ "name": "AC › Failed", "color": "a61f2d", "description": "Autocheck failed to run through a complete cycle, requires investigation" },
|
{ "name": "AC › Failed", "color": "a61f2d", "description": "Autocheck failed to run through a complete cycle, requires investigation" },
|
||||||
@@ -113,9 +104,7 @@ jobs:
|
|||||||
issues-labels-remove:
|
issues-labels-remove:
|
||||||
name: >-
|
name: >-
|
||||||
🎫 Labels › Remove
|
🎫 Labels › Remove
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
runs-on: apollo-x64
|
|
||||||
timeout-minutes: 4
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: 'read'
|
contents: 'read'
|
||||||
id-token: 'write'
|
id-token: 'write'
|
||||||
@@ -123,7 +112,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Labels › Start
|
# [ Delete Labels ] Start
|
||||||
# #
|
# #
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
@@ -133,20 +122,7 @@ jobs:
|
|||||||
echo "Starting workflow"
|
echo "Starting workflow"
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Labels › Set Env Variables
|
# [ Delete Labels ] Checkout
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Timestamp
|
|
||||||
id: task_label_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Labels › Checkout
|
|
||||||
# #
|
# #
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
@@ -157,7 +133,7 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Labels › Start
|
# [ Delete Labels ] Start
|
||||||
# #
|
# #
|
||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
@@ -189,7 +165,6 @@ jobs:
|
|||||||
});
|
});
|
||||||
|
|
||||||
// const labels = JSON.parse( process.env.LABELS_JSON );
|
// const labels = JSON.parse( process.env.LABELS_JSON );
|
||||||
let result = Object.keys(labels).length;
|
|
||||||
for ( const label of labels )
|
for ( const label of labels )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -206,89 +181,3 @@ jobs:
|
|||||||
console.error("Error: " + err);
|
console.error("Error: " + err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("[Success]: Added " + result + " labels to repo");
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Labels › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Weekly Commit List
|
|
||||||
id: task_label_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Labels › Notify Github › Success
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🔔 Send Discord Webhook Message (Success)
|
|
||||||
id: task_label_notify_discord_success
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_TVAPP2_WORKFLOWS }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 🎫 Labels › Clean ${{ job.status == 'success' && '✅' || '❌' }}
|
|
||||||
|
|
||||||
A **successful** workflow has been ran to wipe all labels from your repository.
|
|
||||||
|
|
||||||
**${{ steps.task_label_remove_run.outputs.result }}** labels have been removed.
|
|
||||||
|
|
||||||
- Labels: `${{ steps.task_label_remove_run.outputs.result }} created`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Labels › Notify Github › Failure
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🔔 Send Discord Webhook Message (Failure)
|
|
||||||
id: task_label_notify_discord_failure
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: failure()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_TVAPP2_WORKFLOWS }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 🎫 Labels › Clean ${{ job.status == 'success' && '✅' || '❌' }}
|
|
||||||
|
|
||||||
A **failed** attempt was made to run this workflow. No new labels have been added to your repository.
|
|
||||||
|
|
||||||
- Labels: `${{ steps.task_label_remove_run.outputs.result }} created`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
106
.github/workflows/labels-create.yml
vendored
Executable file → Normal file
@@ -34,7 +34,9 @@ on:
|
|||||||
# #
|
# #
|
||||||
|
|
||||||
env:
|
env:
|
||||||
BOT_NAME_1: EuropaServ
|
BOT_NAME_1: AdminServ
|
||||||
|
BOT_NAME_2: AdminServX
|
||||||
|
BOT_NAME_3: EuropaServ
|
||||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
BOT_NAME_DEPENDABOT: dependabot[bot]
|
||||||
LABELS_JSON: |
|
LABELS_JSON: |
|
||||||
[
|
[
|
||||||
@@ -131,19 +133,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "Assigning labels and assignees"
|
echo "Assigning labels and assignees"
|
||||||
|
|
||||||
# #
|
|
||||||
# Create Labels › Set Env Variables
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Timestamp
|
|
||||||
id: task_label_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# [ Create Labels ] Checkout
|
# [ Create Labels ] Checkout
|
||||||
# #
|
# #
|
||||||
@@ -161,13 +150,11 @@ jobs:
|
|||||||
|
|
||||||
- name: >-
|
- name: >-
|
||||||
🏷️ Verify Existing Labels
|
🏷️ Verify Existing Labels
|
||||||
id: task_label_verify_existing
|
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
github-token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
||||||
script: |
|
script: |
|
||||||
const labels = JSON.parse( process.env.LABELS_JSON );
|
const labels = JSON.parse( process.env.LABELS_JSON );
|
||||||
let result = Object.keys(labels).length;
|
|
||||||
for ( const label of labels )
|
for ( const label of labels )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -193,90 +180,3 @@ jobs:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("[Success]: Added " + result + " labels to repo");
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Cleanup › Get Weekly Commits
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Weekly Commit List
|
|
||||||
id: task_label_set_weekly_commit_list
|
|
||||||
run: |
|
|
||||||
echo 'WEEKLY_COMMITS<<EOF' >> $GITHUB_ENV
|
|
||||||
git log --format="[\`%h\`](${{ github.server_url }}/${{ github.repository }}/commit/%H) %s - %an" --since=7.days >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Cleanup › Notify Github › Success
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🔔 Send Discord Webhook Message (Success)
|
|
||||||
id: task_label_notify_discord_success
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: success()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_TVAPP2_WORKFLOWS }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 🎫 Labels › Create ${{ job.status == 'success' && '✅' || '❌' }}
|
|
||||||
|
|
||||||
A **successful** workflow has been ran to generate labels for your repository.
|
|
||||||
|
|
||||||
**${{ steps.task_label_verify_existing.outputs.result }}** labels have been added.
|
|
||||||
|
|
||||||
- Labels: `${{ steps.task_label_verify_existing.outputs.result }} created`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Cleanup › Notify Github › Failure
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🔔 Send Discord Webhook Message (Failure)
|
|
||||||
id: task_label_notify_discord_failure
|
|
||||||
uses: tsickert/discord-webhook@v6.0.0
|
|
||||||
if: failure()
|
|
||||||
with:
|
|
||||||
username: 'Io'
|
|
||||||
avatar-url: 'https://i.imgur.com/8BVDkla.jpg'
|
|
||||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK_CHAN_TVAPP2_WORKFLOWS }}
|
|
||||||
embed-title: "⚙️ ${{ github.workflow_ref }}"
|
|
||||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-thumbnail-url: 'https://i.imgur.com/zDIzE8T.jpg'
|
|
||||||
embed-description: |
|
|
||||||
## 🎫 Labels › Create ${{ job.status == 'success' && '✅' || '❌' }}
|
|
||||||
|
|
||||||
A **failed** attempt was made to run this workflow. No new labels have been added to your repository.
|
|
||||||
|
|
||||||
- Labels: `${{ steps.task_label_verify_existing.outputs.result }} created`
|
|
||||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
|
||||||
- Runner: `${{ runner.name }}`
|
|
||||||
- Triggered By: `${{ github.actor }}`
|
|
||||||
- Status: `${{ job.status == 'success' && '✅ Successful' || '❌ Failed' }}`
|
|
||||||
|
|
||||||
embed-color: ${{ job.status == 'success' && '5763719' || '15418782' }}
|
|
||||||
embed-footer-text: "Completed at ${{ env.NOW }} UTC"
|
|
||||||
embed-timestamp: "${{ env.NOW_LONG }}"
|
|
||||||
embed-author-name: "${{ github.repository_owner }}"
|
|
||||||
embed-author-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
embed-author-icon-url: "https://avatars.githubusercontent.com/u/200161462"
|
|
||||||
|
|
||||||
|
|||||||
175
.github/workflows/ping-developer.yml
vendored
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
# #
|
||||||
|
# @type github workflow
|
||||||
|
# @desc pings the developer
|
||||||
|
# @author Aetherinox
|
||||||
|
# @url https://github.com/Aetherinox
|
||||||
|
# #
|
||||||
|
|
||||||
|
name: "⚙️ Ping › Developer"
|
||||||
|
run-name: "⚙️ Ping › Developer"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# triggers
|
||||||
|
# #
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
# #
|
||||||
|
# environment variables
|
||||||
|
# #
|
||||||
|
|
||||||
|
env:
|
||||||
|
BOT_NAME_1: AdminServ
|
||||||
|
BOT_NAME_2: AdminServX
|
||||||
|
BOT_NAME_3: EuropaServ
|
||||||
|
BOT_NAME_DEPENDABOT: dependabot[bot]
|
||||||
|
|
||||||
|
# #
|
||||||
|
# jobs
|
||||||
|
#
|
||||||
|
# env not available for job.if
|
||||||
|
# #
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: |
|
||||||
|
contains(github.event.comment.body, '/ping')
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Job > Complete > Get publish timestamp
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: "🕛 Get Timestamp"
|
||||||
|
id: task_complete_timestamp_get
|
||||||
|
run: |
|
||||||
|
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Add Label to accepted PR
|
||||||
|
#
|
||||||
|
# port 465
|
||||||
|
# server_port: 465
|
||||||
|
# secure: true
|
||||||
|
# ignore_cert: false
|
||||||
|
#
|
||||||
|
# port 587
|
||||||
|
# server_port: 587
|
||||||
|
# secure: false
|
||||||
|
# #
|
||||||
|
|
||||||
|
- name: Send mail
|
||||||
|
uses: dawidd6/action-send-mail@v4
|
||||||
|
with:
|
||||||
|
server_address: ${{secrets.EMAIL_SMTP}}
|
||||||
|
server_port: 465
|
||||||
|
secure: true
|
||||||
|
username: ${{secrets.EMAIL_FROM}}
|
||||||
|
password: ${{secrets.EMAIL_KEY}}
|
||||||
|
subject: "Github: Ping notification from ${{ github.repository }}"
|
||||||
|
to: ${{secrets.EMAIL_TO}}
|
||||||
|
from: ${{secrets.EMAIL_FROM}}
|
||||||
|
html_body: |
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>Title</title>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background: url('https://images.unsplash.com/photo-1541422348463-9bc715520974?fm=jpg&q=60&w=3000&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8ZGFyayUyMG1vdW50YWlufGVufDB8fDB8fHww');
|
||||||
|
font-size:9pt;
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
.background-overlay {
|
||||||
|
background-color: #1111119f;
|
||||||
|
}
|
||||||
|
.background-header {
|
||||||
|
background: url('https://process.fs.teachablecdn.com/ADNupMnWyR7kCWRvm76Laz/resize=width:705/https://cdn.filestackcontent.com/MipxnobQRRS5h7raz9aM');
|
||||||
|
background-size: cover;
|
||||||
|
background-size: 100%;
|
||||||
|
background-color:#1b1b1b;
|
||||||
|
padding:5px;
|
||||||
|
height:100px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="background-overlay">
|
||||||
|
<center>
|
||||||
|
<div class="background-header">
|
||||||
|
<a href="https://github.com/${{ github.repository }}"><img style="height:80px;padding-top:10px;" src="https://cdn0.iconfinder.com/data/icons/shift-logotypes/32/Github-512.png"></a>
|
||||||
|
</div>
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<div style="font-size:9pt;padding: 20px;color:#FFF;">
|
||||||
|
<h3><span style="font-size:9pt;color:#cc6613;">[Github]</span> <span style="font-size:9pt;color:#FFF;">Dear ${{github.repository_owner}},</span></h3>
|
||||||
|
<p style="font-size:9pt;color:#FFF;"><br />You have received a ping notification from <a href="https://github.com/${{ github.repository }}">${{ github.repository }}</a> by <a href="https://github.com/${{ github.event.comment.user.login }}">${{ github.event.comment.user.login }}</a>.</p>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<center>
|
||||||
|
<table cellspacing="0" cellpadding="0" width="40%" class="center">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
style="font-size:9pt;background-color:#8a2138;color:#FFF;padding:6px;padding-left:10px;"><b>Repository</b></td>
|
||||||
|
<td style="font-size:9pt;padding-left:5px;color:#b3b3b3;background-color:#1b1b1b;padding-left:10px;">${{ github.repository }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
style="font-size:9pt;background-color:#8a2138;color:#FFF;padding:6px;padding-left:10px;"><b>Date</b></td>
|
||||||
|
<td style="font-size:9pt;padding-left:5px;color:#b3b3b3;background-color:#0f0f0f;padding-left:10px;">${{ env.NOW }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
style="font-size:9pt;background-color:#8a2138;color:#FFF;padding:6px;padding-left:10px;"><b>Commenter</b></td>
|
||||||
|
<td style="font-size:9pt;padding-left:5px;color:#b3b3b3;background-color:#1b1b1b;padding-left:10px;">${{ github.event.comment.user.login }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
style="font-size:9pt;background-color:#8a2138;color:#FFF;padding:6px;padding-left:10px;"><b>Issue #</b></td>
|
||||||
|
<td style="font-size:9pt;padding-left:5px;color:#b3b3b3;background-color:#0f0f0f;padding-left:10px;">${{ github.event.issue.number }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
style="font-size:9pt;background-color:#8a2138;color:#FFF;padding:6px;padding-left:10px;"><b>Action</b></td>
|
||||||
|
<td style="font-size:9pt;padding-left:5px;color:#b3b3b3;background-color:#1b1b1b;padding-left:10px;">Notification</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<div style="font-family:Consolas;">
|
||||||
|
|
||||||
|
<textarea readonly=true style="font-size:9pt;width:60%;background-color:#363636;color:#FFF;padding:15px;border:1px solid #5a5a5a;" id="w3review" name="w3review" rows="20" cols="100">
|
||||||
|
${{ github.event.comment.body }}
|
||||||
|
</textarea>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<p> </p>
|
||||||
|
<p style="color:#FFF;"><br /> ~ Github
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br /><br />
|
||||||
|
|
||||||
|
<div style="background-color:#1b1b1b;padding:5px;line-height:70px;height:70px;text-align:center;">
|
||||||
|
<span style="color:#FFF;font-size:8pt;">Copyright © 2024 - Betelgeuse</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
ignore_cert: true
|
||||||
|
convert_markdown: true
|
||||||
|
priority: normal
|
||||||
625
.github/workflows/release.yml
vendored
@@ -1,625 +0,0 @@
|
|||||||
# #
|
|
||||||
# @type github workflow
|
|
||||||
# @desc publishes a new release on Github
|
|
||||||
# @author Aetherinox
|
|
||||||
# @url https://github.com/Aetherinox
|
|
||||||
# #
|
|
||||||
|
|
||||||
name: "📦 Release › Github"
|
|
||||||
run-name: "📦 Release › Github"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Triggers
|
|
||||||
# #
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Name of the plugin to use when creating the release zip filename
|
|
||||||
# e.g: tvapp2-v1.0.0.zip
|
|
||||||
# #
|
|
||||||
|
|
||||||
PROJECT_NAME:
|
|
||||||
description: "📦 Name of App"
|
|
||||||
required: true
|
|
||||||
default: 'tvapp2'
|
|
||||||
type: string
|
|
||||||
|
|
||||||
# #
|
|
||||||
# ENABLE: the changelog generated in releases tab will only display single commits.
|
|
||||||
# DISABLE: the changelog shows pull requests completed based on their labels
|
|
||||||
# #
|
|
||||||
|
|
||||||
CHANGELOG_MODE_COMMIT:
|
|
||||||
description: "📑 Use Commits Instead of PRs"
|
|
||||||
required: true
|
|
||||||
default: true
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
# #
|
|
||||||
# ENABLE: Will show all types of commits, including uncategorized
|
|
||||||
# DISABLE: WIll only show actions that have been categorized using the format
|
|
||||||
# type(scope): description
|
|
||||||
# type: description
|
|
||||||
# #
|
|
||||||
|
|
||||||
SHOW_UNCATEGORIZED:
|
|
||||||
description: "🗂️ Show Uncategorized Commits"
|
|
||||||
required: true
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
# #
|
|
||||||
# ENABLE: released version will be marked as pre-release
|
|
||||||
# DISABLE: release version will be marked as stable / normal release
|
|
||||||
# #
|
|
||||||
|
|
||||||
PRERELEASE:
|
|
||||||
description: "🧪 Build RC (Pre-release)"
|
|
||||||
required: true
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release Candidate version number
|
|
||||||
# this will be added to the end of your released app in the releases page.
|
|
||||||
# e.g: tvapp2-v1.0.0-rc.1
|
|
||||||
# #
|
|
||||||
|
|
||||||
VERSION_RC:
|
|
||||||
description: "🧪 RC (Pre-release) Ver (tvapp2-rc.v1)"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "1"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# environment variables
|
|
||||||
# #
|
|
||||||
|
|
||||||
env:
|
|
||||||
PROJECT_NAME: ${{ github.event.inputs.PROJECT_NAME || 'tvapp2' }}
|
|
||||||
CHANGELOG_MODE_COMMIT: true
|
|
||||||
SHOW_UNCATEGORIZED: false
|
|
||||||
PRERELEASE: false
|
|
||||||
VERSION_RC: '1'
|
|
||||||
BOT_NAME_1: EuropaServ
|
|
||||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Jobs
|
|
||||||
# #
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Jobs › Initialize
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-initialize:
|
|
||||||
name: >-
|
|
||||||
📦 Initialize
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
package_version: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }}
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Initialize › Start
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "✅ Start"
|
|
||||||
id: task_initialize_start
|
|
||||||
run: |
|
|
||||||
echo "Starting build"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Initialize › Set Env Variables
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Timestamp
|
|
||||||
id: task_initialize_label_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Initialize › Checkout
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "☑️ Checkout"
|
|
||||||
id: task_initialize_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Initialize › Get version from package.json VERSION value
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "👁️🗨️ Package Version › Set"
|
|
||||||
id: task_initialize_package_getversion
|
|
||||||
working-directory: ./tvapp2
|
|
||||||
run: |
|
|
||||||
VER=$(cat package.json | jq -r '.version')
|
|
||||||
echo "PACKAGE_VERSION=$VER" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: "👁️🗨️ Package Version › Get"
|
|
||||||
id: task_initialize_package_version_get
|
|
||||||
run: |
|
|
||||||
echo "VERSION: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Release › Github
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-release:
|
|
||||||
name: >-
|
|
||||||
📦 Publish › Release
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [ job-initialize ]
|
|
||||||
env:
|
|
||||||
PACKAGE_VERSION: ${{ needs.job-initialize.outputs.package_version }}
|
|
||||||
outputs:
|
|
||||||
guid: ${{ steps.task_release_dotenv_get.outputs.GUID }}
|
|
||||||
uuid: ${{ steps.task_release_dotenv_get.outputs.UUID }}
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Checkout
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "☑️ Checkout"
|
|
||||||
id: task_release_checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Set Env Variables
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Timestamp
|
|
||||||
id: task_release_label_set_timestamp
|
|
||||||
run: |
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Print Version Debug
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🪪 Test Next Job Version"
|
|
||||||
id: task_release_debug_print_ver
|
|
||||||
run: |
|
|
||||||
echo "VERSION: ${{ env.PACKAGE_VERSION }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Install package via NPM
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🪪 NPM › Install"
|
|
||||||
id: task_release_npm_install
|
|
||||||
working-directory: ./tvapp2
|
|
||||||
run: |
|
|
||||||
npm ci
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.SELF_TOKEN_CL }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Release › Execute npm generate so that a uuid and guid can be created
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🪪 Generate IDs"
|
|
||||||
id: task_release_npm_env_generate
|
|
||||||
working-directory: ./tvapp2
|
|
||||||
run: |
|
|
||||||
npm run root:generate
|
|
||||||
|
|
||||||
# #
|
|
||||||
# .ENV › Get
|
|
||||||
# Get guid and uuid from env variable generated by npm
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🪪 .ENV › Get"
|
|
||||||
id: task_release_dotenv_get
|
|
||||||
uses: falti/dotenv-action@v1
|
|
||||||
with:
|
|
||||||
path: "./tvapp2/.env"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# .ENV › Print (Debug)
|
|
||||||
# Show guid and uuid from env variable generated by npm
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🪪 .ENV › Read"
|
|
||||||
id: task_dotenv_debug_print
|
|
||||||
run: |
|
|
||||||
echo "GUID: ${{ steps.task_release_dotenv_get.outputs.GUID }}"
|
|
||||||
echo "UUID: ${{ steps.task_release_dotenv_get.outputs.UUID }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Build Project & Create Zip
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🔨 Build › Stable ( ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip )"
|
|
||||||
id: task_release_build_st
|
|
||||||
if: ${{ startsWith( inputs.PRERELEASE, false ) }}
|
|
||||||
run: |
|
|
||||||
echo Building STABLE Package ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip
|
|
||||||
zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip Dockerfile Dockerfile.aarch64 docker-compose.yml docker-entrypoint.sh root/ tvapp2/package.json README.md LICENSE
|
|
||||||
|
|
||||||
echo Building STABLE Package ${{ env.PROJECT_NAME }}-v${{ env.PACKAGE_VERSION }}-docker-compose.zip
|
|
||||||
zip -r ${{ env.PROJECT_NAME }}-v${{ env.PACKAGE_VERSION }}-docker-compose.zip docker-compose.yml README.md LICENSE
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
|
||||||
|
|
||||||
- name: "🔨 Build › RC ( ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip )"
|
|
||||||
id: task_release_build_rc
|
|
||||||
if: ${{ startsWith( inputs.PRERELEASE, true ) }}
|
|
||||||
run: |
|
|
||||||
echo Building PRE-RELEASE Package ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip
|
|
||||||
zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip Dockerfile Dockerfile.aarch64 docker-compose.yml docker-entrypoint.sh root/ tvapp2/package.json README.md LICENSE
|
|
||||||
|
|
||||||
echo Building PRE-RELEASE Package ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}-docker-compose.zip
|
|
||||||
zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}-docker-compose.zip docker-compose.yml README.md LICENSE
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# [ Tag ]: Pre Create
|
|
||||||
#
|
|
||||||
# in order to use the changelog github action, you must pre-create the tag otherwise
|
|
||||||
# the changelog action will have no idea what tag you are going to be creating and
|
|
||||||
# the list of commits will not be for the correct release.
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🔖 Tag › Pre Create ${{ env.PACKAGE_VERSION }}"
|
|
||||||
id: task_release_tag_create
|
|
||||||
uses: rickstaa/action-create-tag@v1
|
|
||||||
with:
|
|
||||||
tag: ${{ env.PACKAGE_VERSION }}
|
|
||||||
tag_exists_error: false
|
|
||||||
message: "Latest release"
|
|
||||||
gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }}
|
|
||||||
gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# [ Tag ]: Confirm
|
|
||||||
#
|
|
||||||
# check if tag already exists
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🔖 Tag › Confirm ${{ env.PACKAGE_VERSION }}"
|
|
||||||
id: task_release_tag_get
|
|
||||||
run: |
|
|
||||||
echo "Tag already present: ${{ env.TAG_EXISTS }}"
|
|
||||||
echo "Tag already present: ${{ steps.task_release_tag_create.outputs.tag_exists }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Checksum › Generate
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🆔 Checksum › Stable"
|
|
||||||
id: task_release_checksum_st_set
|
|
||||||
if: ${{ startsWith( inputs.PRERELEASE, false ) }}
|
|
||||||
run: |
|
|
||||||
filename_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip"
|
|
||||||
sha256="$(shasum --algorithm 256 ${filename_zip} | awk '{ print $1 }')"
|
|
||||||
shasum --algorithm 256 ${filename_zip} > SHA256SUMS.txt
|
|
||||||
echo "FILE_ZIP=${filename_zip}" >> $GITHUB_ENV
|
|
||||||
echo "SHA256SUM=${sha256}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
filename_compose_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-docker-compose.zip"
|
|
||||||
sha256_compose="$(shasum --algorithm 256 ${filename_compose_zip} | awk '{ print $1 }')"
|
|
||||||
echo "FILE_COMPOSE_ZIP=${filename_compose_zip}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: "🆔 Checksum › RC"
|
|
||||||
id: task_release_checksum_rc_set
|
|
||||||
if: ${{ startsWith( inputs.PRERELEASE, true ) }}
|
|
||||||
run: |
|
|
||||||
filename_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip"
|
|
||||||
sha256="$(shasum --algorithm 256 ${filename_zip} | awk '{ print $1 }')"
|
|
||||||
shasum --algorithm 256 ${filename_zip} > SHA256SUMS.txt
|
|
||||||
echo "FILE_ZIP=${filename_zip}" >> $GITHUB_ENV
|
|
||||||
echo "SHA256SUM=${sha256}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
filename_compose_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}-docker-compose.zip"
|
|
||||||
sha256_compose="$(shasum --algorithm 256 ${filename_compose_zip} | awk '{ print $1 }')"
|
|
||||||
echo "FILE_COMPOSE_ZIP=${filename_compose_zip}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Checksum › Print
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🆔 Checksum › Print"
|
|
||||||
id: task_release_checksum_st_get
|
|
||||||
run: |
|
|
||||||
echo ${{ env.SHA256SUM }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Contributor Images
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🥸 Contributors › Generate"
|
|
||||||
id: task_release_contribs_generate
|
|
||||||
uses: jaywcjlove/github-action-contributors@main
|
|
||||||
with:
|
|
||||||
filter-author: (renovate\[bot\]|renovate-bot|dependabot\[bot\])
|
|
||||||
output: CONTRIBUTORS.svg
|
|
||||||
avatarSize: 42
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Checksum › Add to ZIP file
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "📦 Zip › Add Checksum › Stable"
|
|
||||||
id: task_release_zip_st
|
|
||||||
if: ${{ startsWith( inputs.PRERELEASE, false ) }}
|
|
||||||
run: |
|
|
||||||
echo Zipping STABLE Package .zip ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip
|
|
||||||
zip -jr ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip SHA256SUMS.txt
|
|
||||||
ls
|
|
||||||
|
|
||||||
- name: "📦 Zip › Add Checksum › RC"
|
|
||||||
id: task_release_zip_rc
|
|
||||||
if: ${{ startsWith( inputs.PRERELEASE, true ) }}
|
|
||||||
run: |
|
|
||||||
echo Zipping PRE-RELEASE Package .zip ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip
|
|
||||||
zip -jr ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip SHA256SUMS.txt
|
|
||||||
ls
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Changelog › Generate
|
|
||||||
#
|
|
||||||
# generates a changelog from the github api. requires a PREVIOUS_TAG in order to figure
|
|
||||||
# out the changes made between the two versions.
|
|
||||||
#
|
|
||||||
# outputs:
|
|
||||||
# ${{ steps.changelog.outputs.changelog }}
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "📝 Changelog › Pre Setup (Categorized Commits)"
|
|
||||||
id: task_release_changelog_categorized_sha_set
|
|
||||||
run: |
|
|
||||||
echo "TAG_LAST=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
|
|
||||||
echo "COMMIT_LAST=$(git rev-parse HEAD)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: "📝 Changelog › Build (Categorized)"
|
|
||||||
id: task_release_changelog_categorized
|
|
||||||
if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, false ) }}
|
|
||||||
uses: mikepenz/release-changelog-builder-action@v5
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.ADMINSERV_TOKEN }}
|
|
||||||
#fromTag: "${{ env.TAG_LAST }}"
|
|
||||||
#toTag: "${{ github.ref }}"
|
|
||||||
configuration: ".github/changelog-configuration.json"
|
|
||||||
ignorePreReleases: false
|
|
||||||
commitMode: ${{ inputs.CHANGELOG_MODE_COMMIT }}
|
|
||||||
fetchReleaseInformation: true
|
|
||||||
fetchViaCommits: true
|
|
||||||
configurationJson: |
|
|
||||||
{
|
|
||||||
"template": "## Release Info \n| Item | Value |\n| --- | --- |\n|<sub>📄 ${{ env.FILE_ZIP }}</sub>|<sub>Contains TVApp2 node source code and Docker build kit</sub>|\n|<sub>📄 ${{ env.FILE_COMPOSE_ZIP }}</sub>|<sub>Contains `docker-compose.yml`</sub>|\n|<sub>🏷️ SHA256</sub>|<sub>`${{ env.SHA256SUM }}`</sub>|\n|<sub>🏷️ GUID</sub>|<sub>`${{ steps.task_release_dotenv_get.outputs.GUID }}`</sub>|\n|<sub>🏷️ UUID</sub>|<sub>`${{ steps.task_release_dotenv_get.outputs.UUID }}`</sub>|\n|<sub>🕟 Stamp</sub>|<sub>`#{{FROM_TAG}}-#{{FROM_TAG_DATE}} 🔺 #{{TO_TAG}}-#{{TO_TAG_DATE}}`</sub>|\n|<sub>📅 Last Release</sub>|<sub>`#{{DAYS_SINCE}} days ago`</sub>|\n\n<br>\n\n---\n\n<br>\n\n### What's New\nThis release contains the following changes:\n\n<br>\n\n---\n\n<br>\n\n### Statistics\nHow the files have changed:\n<ul><li><a href='#{{RELEASE_DIFF}}'>Changed files</a> : <b>#{{CHANGED_FILES}}</b></li><li>Changes : <b>#{{CHANGES}}</b></li><li>Commits : <b>#{{COMMITS}}</b></li><li>Additions : <b>#{{ADDITIONS}}</b></li><li>Deletions : <b>#{{DELETIONS}}</b></li><li>PRs (categorized) : <b>#{{CATEGORIZED_COUNT}}</b></li><li>PRs (uncategorized) : <b>#{{UNCATEGORIZED_COUNT}}</b></li><li>PRs (open) : <b>#{{OPEN_COUNT}}</b></li>\n<br />\n</ul>\n\n<br>\n\n---\n\n<br>\n\n### Pull Requests\nThis release is associated with the following pull requests:\n#{{CHANGELOG}}\n\n<br>\n\n---\n\n<br>\n\n"
|
|
||||||
}
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# shows only categorized commits using the commit standards
|
|
||||||
# type(scope): description
|
|
||||||
# type: description
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "📝 Changelog › Build (Uncategorized)"
|
|
||||||
id: task_release_changelog_uncategorized
|
|
||||||
if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, true ) }}
|
|
||||||
uses: mikepenz/release-changelog-builder-action@v5
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.ADMINSERV_TOKEN }}
|
|
||||||
#fromTag: "${{ env.TAG_LAST }}"
|
|
||||||
#toTag: "${{ github.ref }}"
|
|
||||||
configuration: ".github/changelog-configuration.json"
|
|
||||||
ignorePreReleases: false
|
|
||||||
commitMode: ${{ inputs.CHANGELOG_MODE_COMMIT }}
|
|
||||||
fetchReleaseInformation: true
|
|
||||||
fetchViaCommits: true
|
|
||||||
configurationJson: |
|
|
||||||
{
|
|
||||||
"template": "## Release Info \n| Item | Value |\n| --- | --- |\n|<sub>📄 ${{ env.FILE_ZIP }}</sub>|<sub>Contains TVApp2 node source code and Docker build kit</sub>|\n|<sub>📄 ${{ env.FILE_COMPOSE_ZIP }}</sub>|<sub>Contains `docker-compose.yml`</sub>|\n|<sub>🏷️ SHA256</sub>|<sub>`${{ env.SHA256SUM }}`</sub>|\n|<sub>🏷️ GUID</sub>|<sub>`${{ steps.task_release_dotenv_get.outputs.GUID }}`</sub>|\n|<sub>🏷️ UUID</sub>|<sub>`${{ steps.task_release_dotenv_get.outputs.UUID }}`</sub>|\n|<sub>🕟 Stamp</sub>|<sub>`#{{FROM_TAG}}-#{{FROM_TAG_DATE}} 🔺 #{{TO_TAG}}-#{{TO_TAG_DATE}}`</sub>|\n|<sub>📅 Last Release</sub>|<sub>`#{{DAYS_SINCE}} days ago`</sub>|\n\n<br>\n\n---\n\n<br>\n\n### What's New\nThis release contains the following changes:\n\n<br>\n\n---\n\n<br>\n\n### Statistics\nHow the files have changed:\n<ul><li><a href='#{{RELEASE_DIFF}}'>Changed files</a> : <b>#{{CHANGED_FILES}}</b></li><li>Changes : <b>#{{CHANGES}}</b></li><li>Commits : <b>#{{COMMITS}}</b></li><li>Additions : <b>#{{ADDITIONS}}</b></li><li>Deletions : <b>#{{DELETIONS}}</b></li><li>PRs (categorized) : <b>#{{CATEGORIZED_COUNT}}</b></li><li>PRs (uncategorized) : <b>#{{UNCATEGORIZED_COUNT}}</b></li><li>PRs (open) : <b>#{{OPEN_COUNT}}</b></li>\n<br />\n</ul>\n\n<br>\n\n---\n\n<br>\n\n### Commits (#{{UNCATEGORIZED_COUNT}})\nThe following commits are uncategorized:\n#{{UNCATEGORIZED}}\n\n<br>\n\n---\n\n<br>\n\n### Pull Requests\nThis release is associated with the following pull requests:\n#{{CHANGELOG}}\n\n<br>\n\n"
|
|
||||||
}
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Changelog › Fetch
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "📝 Changelog › Print (Categorized)"
|
|
||||||
if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, false ) }}
|
|
||||||
run: |
|
|
||||||
echo "${{ steps.task_release_changelog_categorized.outputs.changelog }}"
|
|
||||||
|
|
||||||
- name: "📝 Changelog › Print (Uncategorized)"
|
|
||||||
if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, true ) }}
|
|
||||||
run: |
|
|
||||||
echo "${{ steps.task_release_changelog_uncategorized.outputs.changelog }}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# [ Release ]: Post Release
|
|
||||||
#
|
|
||||||
# outputs:
|
|
||||||
# [RELEASE ID]:
|
|
||||||
# ${{ steps.task_release_bundle_rc.outputs.id
|
|
||||||
# ${{ steps.task_release_bundle_st.outputs.id
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🏳️ Post › Stable"
|
|
||||||
if: ${{ startsWith( inputs.PRERELEASE, false ) }}
|
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
id: task_release_bundle_st
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
|
||||||
name: v${{ env.PACKAGE_VERSION }}
|
|
||||||
tag_name: ${{ env.PACKAGE_VERSION }}
|
|
||||||
target_commitish: ${{ github.event.inputs.branch }}
|
|
||||||
draft: false
|
|
||||||
generate_release_notes: false
|
|
||||||
files: |
|
|
||||||
${{ env.PROJECT_NAME }}-v${{ env.PACKAGE_VERSION }}-docker-compose.zip
|
|
||||||
${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip
|
|
||||||
SHA256SUMS.txt
|
|
||||||
prerelease: false
|
|
||||||
body: |
|
|
||||||
${{ steps.task_release_changelog_categorized.outputs.changelog }}
|
|
||||||
${{ steps.task_release_changelog_uncategorized.outputs.changelog }}
|
|
||||||
|
|
||||||
- name: "🏳️ Post › Release Candidate"
|
|
||||||
if: ${{ startsWith( inputs.PRERELEASE, true ) }}
|
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
id: task_release_bundle_rc
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }}
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.ADMINSERV_TOKEN }}
|
|
||||||
name: v${{ env.PACKAGE_VERSION }}
|
|
||||||
tag_name: ${{ env.PACKAGE_VERSION }}
|
|
||||||
target_commitish: ${{ github.event.inputs.branch }}
|
|
||||||
draft: false
|
|
||||||
generate_release_notes: false
|
|
||||||
files: |
|
|
||||||
${{ env.PROJECT_NAME }}-v${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}-docker-compose.zip
|
|
||||||
${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip
|
|
||||||
SHA256SUMS.txt
|
|
||||||
prerelease: false
|
|
||||||
body: |
|
|
||||||
> [!WARNING]
|
|
||||||
> This is a **release candidate**, which means it is not a stable release and could contain bugs. You should download it at your own risk.
|
|
||||||
|
|
||||||
${{ steps.task_release_changelog_categorized.outputs.changelog }}
|
|
||||||
${{ steps.task_release_changelog_uncategorized.outputs.changelog }}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Print Status
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🎛️ Status › Print"
|
|
||||||
id: task_release_status_print
|
|
||||||
run: |
|
|
||||||
echo "Printing Variables"
|
|
||||||
echo
|
|
||||||
echo "---- CHANGELOG ---------------------------------------------------------------"
|
|
||||||
echo "${{ steps.task_release_changelog_categorized.outputs.changelog }}"
|
|
||||||
echo "${{ steps.task_changelog_uncategorized.outputs.changelog }}"
|
|
||||||
echo "---- CHANGELOG ---------------------------------------------------------------"
|
|
||||||
echo ""
|
|
||||||
echo ""
|
|
||||||
echo "---- VARIABLES ---------------------------------------------------------------"
|
|
||||||
echo "Package Version ............ ${{ env.PACKAGE_VERSION }}"
|
|
||||||
echo "Tag: Previous .............. ${{ env.TAG_LAST }}"
|
|
||||||
echo "Tag: Now.... ............... ${{ github.ref }}"
|
|
||||||
echo "Last Commit ................ ${{ env.COMMIT_LAST }}"
|
|
||||||
echo "ST Output ID ............... ${{ steps.task_release_bundle_st.outputs.id }}"
|
|
||||||
echo "RC Output ID ............... ${{ steps.task_release_bundle_rc.outputs.id }}"
|
|
||||||
echo "---- CHANGELOG ---------------------------------------------------------------"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Upload artifacts > release files
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
📋 Upload Artifacts › ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip
|
|
||||||
id: task_release_artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
if: always()
|
|
||||||
with:
|
|
||||||
name: "${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}"
|
|
||||||
path: ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip
|
|
||||||
retention-days: 30
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Complete
|
|
||||||
# #
|
|
||||||
|
|
||||||
job-complete:
|
|
||||||
name: >-
|
|
||||||
🆗 Successful Deployment
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [ job-initialize, job-release ]
|
|
||||||
env:
|
|
||||||
PACKAGE_VERSION: ${{ needs.job-initialize.outputs.package_version }}
|
|
||||||
GUID: ${{ needs.job-release.outputs.guid }}
|
|
||||||
UUID: ${{ needs.job-release.outputs.uuid }}
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Complete › Download Artifacts
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "📁 Download › Saved Artifacts"
|
|
||||||
id: task_complete_artifacts_download
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Complete › Get publish timestamp
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: >-
|
|
||||||
🕛 Get Timestamp
|
|
||||||
id: task_complete_timestamp_get
|
|
||||||
run: |
|
|
||||||
echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV
|
|
||||||
echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job > Complete > Set ENVs
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🕛 Get Env Vars"
|
|
||||||
id: task_complete_set_envs
|
|
||||||
run: |
|
|
||||||
release_stable_file="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}/${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip"
|
|
||||||
release_stable_sha256="$(shasum --algorithm 256 ${release_stable_file} | awk '{ print $1 }')"
|
|
||||||
|
|
||||||
echo "FILE_STABLE=${release_stable_file}" >> $GITHUB_ENV
|
|
||||||
echo "SHA_STABLE=${release_stable_sha256}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Job › Complete › Summary of publish
|
|
||||||
# #
|
|
||||||
|
|
||||||
- name: "🆗 Completed: ${{ env.NOW }}"
|
|
||||||
id: task_complete_summary
|
|
||||||
run: |
|
|
||||||
echo ""
|
|
||||||
echo ""
|
|
||||||
echo "| File | Result |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| ------------------------------- | ----------------------- |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| 📦 **Project** | ${{ env.PROJECT_NAME }} |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| 🕛 **Deploy Time** | ${{ env.NOW }} |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo ""
|
|
||||||
echo "### 📄 File (${{ env.FILE_STABLE }}) " >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "This is the main release. It contains all required docker files, and the TVApp2 `package.json`" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| File | Result |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| ------------------------------- | ----------------------- |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| 🏷️ **SHA256** | ${{ env.SHA_STABLE }} |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| 🏷️ **GUID** | ${{ env.GUID }} |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| 🏷️ **UUID** | ${{ env.UUID }} |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
|
|
||||||
316
.gitignore
vendored
Executable file → Normal file
@@ -1,322 +1,64 @@
|
|||||||
# #
|
# #
|
||||||
# Dependency directories
|
# Windows image file caches
|
||||||
# #
|
# #
|
||||||
|
|
||||||
node_modules/
|
Thumbs.db
|
||||||
jspm_packages/
|
ehthumbs.db
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Snowpack dependency directory (https://snowpack.dev/)
|
# Folder config file
|
||||||
# #
|
# #
|
||||||
|
|
||||||
web_modules/
|
Desktop.ini
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# TypeScript cache
|
# Recycle Bin used on file shares
|
||||||
# #
|
# #
|
||||||
|
|
||||||
\*.tsbuildinfo
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Optional npm cache directory
|
# Windows Installer files
|
||||||
# #
|
# #
|
||||||
|
|
||||||
.npm
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# npm files
|
# Windows shortcuts
|
||||||
# #
|
# #
|
||||||
|
|
||||||
.npmrc
|
*.lnk
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Optional eslint cache
|
# Operating System Files
|
||||||
# #
|
# #
|
||||||
|
|
||||||
.eslintcache
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Optional stylelint cache
|
# Thumbnails
|
||||||
# #
|
# #
|
||||||
|
|
||||||
.stylelintcache
|
._*
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Microbundle cache
|
# Other
|
||||||
# #
|
# #
|
||||||
|
|
||||||
.rpt2_cache/
|
.Spotlight-V100
|
||||||
.rts2_cache_cjs/
|
.Trashes
|
||||||
.rts2_cache_es/
|
|
||||||
.rts2_cache_umd/
|
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Optional REPL history
|
# Directories potentially created on remote AFP share
|
||||||
# #
|
# #
|
||||||
|
|
||||||
.node_repl_history
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
# #
|
Network Trash Folder
|
||||||
# Output of 'npm pack'
|
Temporary Items
|
||||||
# #
|
.apdisk
|
||||||
|
|
||||||
\*.tgz
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Yarn Integrity file
|
|
||||||
# #
|
|
||||||
|
|
||||||
.yarn-integrity
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Binaries
|
|
||||||
# #
|
|
||||||
|
|
||||||
*.exe
|
|
||||||
*.exe~
|
|
||||||
*.dll
|
|
||||||
*.so
|
|
||||||
*.dylib
|
|
||||||
|
|
||||||
# #
|
|
||||||
# TVApp2 Specific
|
|
||||||
# #
|
|
||||||
|
|
||||||
*.dat
|
|
||||||
*.xml
|
|
||||||
*.txt
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Test binary
|
|
||||||
# build with `go test -c`
|
|
||||||
# #
|
|
||||||
|
|
||||||
*.test
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Coverage directory used by tools like istanbul
|
|
||||||
# #
|
|
||||||
|
|
||||||
coverage
|
|
||||||
\*.lcov
|
|
||||||
*.out
|
|
||||||
|
|
||||||
# #
|
|
||||||
# nyc test coverage
|
|
||||||
# #
|
|
||||||
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
|
||||||
# #
|
|
||||||
|
|
||||||
.grunt
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Bower dependency directory (https://bower.io/)
|
|
||||||
# #
|
|
||||||
|
|
||||||
bower_components
|
|
||||||
|
|
||||||
# #
|
|
||||||
# node-waf configuration
|
|
||||||
# #
|
|
||||||
|
|
||||||
.lock-wscript
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
|
||||||
# #
|
|
||||||
|
|
||||||
build/Release
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Dependency directories (remove the comment below to include it)
|
|
||||||
# vendor/
|
|
||||||
# #
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Go workspace file
|
|
||||||
# #
|
|
||||||
|
|
||||||
go.work
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Mac
|
|
||||||
# #
|
|
||||||
|
|
||||||
.DS_STORE
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Visual Studio Code
|
|
||||||
# #
|
|
||||||
|
|
||||||
.vscode/
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Temp folders
|
|
||||||
# #
|
|
||||||
|
|
||||||
.temp/
|
|
||||||
temp/
|
|
||||||
work/
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Python Cache
|
|
||||||
# #
|
|
||||||
|
|
||||||
__pycache__/
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Logs
|
|
||||||
# #
|
|
||||||
|
|
||||||
logs
|
|
||||||
_.log
|
|
||||||
npm-debug.log_
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
lerna-debug.log*
|
|
||||||
.pnpm-debug.log*
|
|
||||||
|
|
||||||
# #
|
|
||||||
# yarn v2
|
|
||||||
# #
|
|
||||||
|
|
||||||
.yarn/cache
|
|
||||||
.yarn/unplugged
|
|
||||||
.yarn/build-state.yml
|
|
||||||
.yarn/install-state.gz
|
|
||||||
.pnp.\*
|
|
||||||
|
|
||||||
# #
|
|
||||||
# wrangler project
|
|
||||||
# #
|
|
||||||
|
|
||||||
.dev.vars
|
|
||||||
.wrangler/
|
|
||||||
|
|
||||||
# #
|
|
||||||
# sources
|
|
||||||
# #
|
|
||||||
|
|
||||||
.src
|
|
||||||
|
|
||||||
# #
|
|
||||||
# dist
|
|
||||||
# #
|
|
||||||
|
|
||||||
.dist
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Private Files
|
|
||||||
# #
|
|
||||||
|
|
||||||
.dev
|
|
||||||
keys
|
|
||||||
|
|
||||||
# #
|
|
||||||
# dotenv environment variable files
|
|
||||||
# #
|
|
||||||
|
|
||||||
.env
|
|
||||||
.env.development.local
|
|
||||||
.env.test.local
|
|
||||||
.env.production.local
|
|
||||||
.env.local
|
|
||||||
|
|
||||||
# #
|
|
||||||
# parcel-bundler cache (https://parceljs.org/)
|
|
||||||
# #
|
|
||||||
|
|
||||||
.cache
|
|
||||||
.parcel-cache
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Next.js build output
|
|
||||||
# #
|
|
||||||
|
|
||||||
.next
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Nuxt.js build / generate output
|
|
||||||
# #
|
|
||||||
|
|
||||||
.nuxt
|
|
||||||
|
|
||||||
# #
|
|
||||||
# vuepress build output
|
|
||||||
# #
|
|
||||||
|
|
||||||
.vuepress/dist
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Docusaurus cache and generated files
|
|
||||||
# #
|
|
||||||
|
|
||||||
.docusaurus
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Serverless directories
|
|
||||||
# #
|
|
||||||
|
|
||||||
.serverless/
|
|
||||||
|
|
||||||
# #
|
|
||||||
# FuseBox cache
|
|
||||||
# #
|
|
||||||
|
|
||||||
.fusebox/
|
|
||||||
|
|
||||||
# #
|
|
||||||
# DynamoDB Local files
|
|
||||||
# #
|
|
||||||
|
|
||||||
.dynamodb/
|
|
||||||
|
|
||||||
# #
|
|
||||||
# TernJS port file
|
|
||||||
# #
|
|
||||||
|
|
||||||
.tern-port
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Gatsby files
|
|
||||||
# #
|
|
||||||
|
|
||||||
.cache/
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Misc
|
|
||||||
# #
|
|
||||||
|
|
||||||
tmp
|
|
||||||
*.user
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Python files
|
|
||||||
# #
|
|
||||||
|
|
||||||
.opt-*
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
|
||||||
# #
|
|
||||||
|
|
||||||
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Runtime data
|
|
||||||
# #
|
|
||||||
|
|
||||||
pids
|
|
||||||
_.pid
|
|
||||||
_.seed
|
|
||||||
\*.pid.lock
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
|
||||||
# #
|
|
||||||
|
|
||||||
lib-cov
|
|
||||||
389
CONTRIBUTING.md
Normal file
@@ -0,0 +1,389 @@
|
|||||||
|
<div align="center">
|
||||||
|
<h6>Thank you for your interest in contributing!</h6>
|
||||||
|
<h1>♾️ Contributing ♾️</h1>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<!-- prettier-ignore-start -->
|
||||||
|
[![Version][github-version-img]][github-version-uri]
|
||||||
|
[![Build Status][github-build-img]][github-build-uri]
|
||||||
|
[![Downloads][github-downloads-img]][github-downloads-uri]
|
||||||
|
[![Size][github-size-img]][github-size-img]
|
||||||
|
[![Last Commit][github-commit-img]][github-commit-img]
|
||||||
|
[![Contributors][contribs-all-img]](#contributors-)
|
||||||
|
<!-- prettier-ignore-end -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
|
Below are a list of ways that you can help contribute to this project, as well as policies and guides that explain how to get started.
|
||||||
|
|
||||||
|
Please review everything on this page before you submit your contribution.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
- [About](#about)
|
||||||
|
- [Issues, Bugs, Ideas](#issues-bugs-ideas)
|
||||||
|
- [Contributing](#contributing)
|
||||||
|
- [Before Submitting Pull Requests](#before-submitting-pull-requests)
|
||||||
|
- [Conventional Commit Specification](#conventional-commit-specification)
|
||||||
|
- [Types](#types)
|
||||||
|
- [Example 1:](#example-1)
|
||||||
|
- [Example 2:](#example-2)
|
||||||
|
- [Commiting](#commiting)
|
||||||
|
- [Commenting](#commenting)
|
||||||
|
- [Casing](#casing)
|
||||||
|
- [Indentation Style](#indentation-style)
|
||||||
|
- [Spaces Instead Of Tabs](#spaces-instead-of-tabs)
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
## Issues, Bugs, Ideas
|
||||||
|
Stuff happens, and sometimes as best as we try, there may be issues within this project that we are unaware of. That is the great thing about open-source; anyone can use the program and contribute to making it better.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
If you have found a bug, have an issue, or maybe even a cool idea; you can let us know by [submitting it](https://github.com/aetherinox/thetvapp-docker/issues). However, before you submit your new issue, bug report, or feature request; head over to the [Issues Section](https://github.com/aetherinox/thetvapp-docker/issues) and ensure nobody else has already submitted it.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
Once you are sure that your issue has not already being dealt with; you may submit a new issue at [here](https://github.com/aetherinox/thetvapp-docker/issues/new/choose). You'll be asked to specify exactly what your new submission targets, such as:
|
||||||
|
- Bug report
|
||||||
|
- Feature Suggestion
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
When writing a new submission; ensure you fill out any of the questions asked of you. If you do not provide enough information, we cannot help. Be as detailed as possible, and provide any logs or screenshots you may have to help us better understand what you mean. Failure to fill out the submission properly may result in it being closed without a response.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
If you are submitting a bug report:
|
||||||
|
|
||||||
|
- Explain the issue
|
||||||
|
- Describe how you expect for a feature to work, and what you're seeing instead of what you expected.
|
||||||
|
- List possible options for a resolution or insight
|
||||||
|
- Provide screenshots, logs, or anything else that can visually help track down the issue.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
[![Submit Issue][btn-github-submit-img]][btn-github-submit-uri]
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
**[`^ back to top ^`](#about)**
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
If you are looking to contribute to this project by actually submit your own code; please review this section completely. There is important information and policies provided below that you must follow for your pull request to get accepted.
|
||||||
|
|
||||||
|
The source is here for everyone to collectively share and colaborate on. If you think you have a possible solution to a problem; don't be afraid to get your hands dirty.
|
||||||
|
|
||||||
|
All contributions are made via pull requests. To create a pull request, you need a GitHub account. If you are unclear on this process, see [GitHub's documentation on forking and pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork). Pull requests should be targeted at the master branch.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
### Before Submitting Pull Requests
|
||||||
|
|
||||||
|
- Follow the repository's code formatting conventions (see below);
|
||||||
|
- Include tests that prove that the change works as intended and does not add regressions;
|
||||||
|
- Document the changes in the code and/or the project's documentation;
|
||||||
|
- Your PR must pass the CI pipeline;
|
||||||
|
- When submitting your Pull Request, use one of the following branches:
|
||||||
|
- For bug fixes: `main` branch
|
||||||
|
- For features & functionality: `development` branch
|
||||||
|
- Include a proper git commit message following the [Conventional Commit Specification](https://www.conventionalcommits.org/en/v1.0.0/#specification).
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
If you have completed the above tasks, the pull request is ready to be reviewed and your pull request's label will be changed to "Ready for Review". At this point, a human will need to step in and manually verify your submission.
|
||||||
|
|
||||||
|
Reviewers will approve the pull request once they are satisfied with the patch it will be merged.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
### Conventional Commit Specification
|
||||||
|
|
||||||
|
When commiting your changes, we require you to follow the [Conventional Commit Specification](https://www.conventionalcommits.org/en/v1.0.0/#specification). The **Conventional Commits** is a specification for the format and content of a commit message. The concept behind Conventional Commits is to provide a rich commit history that can be read and understood by both humans and automated tools. Conventional Commits have the following format:
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
```
|
||||||
|
<type>[(optional <scope>)]: <description>
|
||||||
|
|
||||||
|
[optional <body>]
|
||||||
|
|
||||||
|
[optional <footer(s)>]
|
||||||
|
```
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
#### Types
|
||||||
|
| Type | Description |
|
||||||
|
| --- | --- |
|
||||||
|
| `feat` | Introduce new feature |
|
||||||
|
| `fix` | Bug fix |
|
||||||
|
| `deps` | Add or update existing dependencies |
|
||||||
|
| `docs` | Change website or markdown documents. Does not mean changes to the documentation generator script itself, only the documents created from the generator. <br/><br/><small>E.g: documentation, readme.md or markdown</small> <br /><br /> |
|
||||||
|
| `build` | Changes to the build / compilation / packaging process or auxiliary tools such as doc generation<br /><br/><small>E.g: create new build tasks, update release script, etc.</small> |
|
||||||
|
| `test` | Add or refactor tests, no production code change. Changes the suite of automated tests for the app. |
|
||||||
|
| `perf` | Performance improvement of algorithms or execution time of the app. Does not change an existing feature. |
|
||||||
|
| `style` | Update / reformat style of source code. Does not change the way app is implemented. Changes that do not affect the meaning of the code<br /><br/><small>E.g: white-space, formatting, missing semi-colons, change tabs to spaces, etc)</small> |
|
||||||
|
| `refactor` | Change to production code that leads to no behavior difference,<br/><br/><small>E.g: split files, rename variables, rename package, improve code style, etc.</small> |
|
||||||
|
| `change` | Change an existing feature. |
|
||||||
|
| `chore` | Includes technical or preventative maintenance task that is necessary for managing the app or repo, such as updating grunt tasks, but is not tied to any specific feature. Usually done for maintanence purposes.<br/><br/><small>E.g: Edit .gitignore, .prettierrc, .prettierignore, .gitignore, eslint.config.js file</small> |
|
||||||
|
| `ci` | Changes related to Continuous Integration (usually `yml` and other configuration files). |
|
||||||
|
| `misc` | Anything that doesn't fit into another commit type. Usually doesn't change production code; yet is not ci, test or chore. |
|
||||||
|
| `revert` | Revert a previous commit |
|
||||||
|
| `remove` | Remove a feature from app. Features are usually first deprecated for a period of time before being removed. Removing a feature from the app may be considered a breaking change that will require a major version number increment.|
|
||||||
|
| `deprecate` | Deprecate existing functionality, but does not remove it from the app.|
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
##### Example 1:
|
||||||
|
|
||||||
|
```
|
||||||
|
feat(core): bug affecting menu [#22]
|
||||||
|
^───^────^ ^────────────────^ ^───^
|
||||||
|
| | | |
|
||||||
|
| | | └───⫸ (ISSUE): Reference issue ID
|
||||||
|
│ │ │
|
||||||
|
│ │ └───⫸ (DESC): Summary in present tense. Use lower case not title case!
|
||||||
|
│ │
|
||||||
|
│ └───────────⫸ (SCOPE): The package(s) that this change affects
|
||||||
|
│
|
||||||
|
└───────────────⫸ (TYPE): See list above
|
||||||
|
```
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
##### Example 2:
|
||||||
|
```
|
||||||
|
<type>(<scope>): <short summary> [issue]
|
||||||
|
| | | |
|
||||||
|
| | | └─⫸ Reference issue id (optional)
|
||||||
|
│ │ │
|
||||||
|
│ │ └─⫸ Summary in present tense. Not capitalized. No period at the end.
|
||||||
|
│ │
|
||||||
|
│ └─⫸ Commit Scope: animations|bazel|benchpress|common|compiler|compiler-cli|core|
|
||||||
|
│ elements|forms|http|language-service|localize|platform-browser|
|
||||||
|
│ platform-browser-dynamic|platform-server|router|service-worker|
|
||||||
|
│ upgrade|zone.js|packaging|changelog|docs-infra|migrations|ngcc|ve|
|
||||||
|
│ devtools....
|
||||||
|
│
|
||||||
|
└─⫸ Commit Type: build|ci|doc|docs|feat|fix|perf|refactor|test
|
||||||
|
website|chore|style|type|revert|deprecate
|
||||||
|
```
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
### Commiting
|
||||||
|
If you are pushing a commit which addresses a submitted issue, reference your issue at the end of the commit message. You may also optionally add the major issue to the end of your commit body.
|
||||||
|
|
||||||
|
References should be on their own line, following the word `Ref` or `Refs`
|
||||||
|
|
||||||
|
```
|
||||||
|
Title: fix(core): fix error message displayed to users. [#22]
|
||||||
|
Description: The description of your commit
|
||||||
|
|
||||||
|
Ref: #22, #34, #37
|
||||||
|
```
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
### Commenting
|
||||||
|
|
||||||
|
Comment your code. If someone else comes along, they should be able to do a quick glance and have an idea of what is going on. Plus it helps novice readers to better understand the process.
|
||||||
|
|
||||||
|
You may use block style commenting, or single lines:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# #
|
||||||
|
# set perms and import user crontabs
|
||||||
|
# #
|
||||||
|
|
||||||
|
checkown "${cron_user}":"${cron_user}" "/config/crontabs/${cron_user}"
|
||||||
|
crontab -u "${cron_user}" "/config/crontabs/${cron_user}"
|
||||||
|
```
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
At the top of any new file introduced, please add the following header:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/usr/bin/with-contenv bash
|
||||||
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
# #
|
||||||
|
# @project thetvapp-docker
|
||||||
|
# @about DESCRIPTION OF WHAT FILE DOES
|
||||||
|
# @file /path/to/file.ext
|
||||||
|
# @repo https://github.com/Aetherinox/thetvapp-docker
|
||||||
|
# #
|
||||||
|
```
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
### Casing
|
||||||
|
|
||||||
|
When calling environment variables, you should use `UPPERCASE`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
arg_cron=$(echo ${CRON_TIME})
|
||||||
|
if [ -z "${arg_cron}" ]; then
|
||||||
|
arg_cron="0/60 * * * *"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
When defining general variables, use `snake_case`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
migrations_dir="/migrations"
|
||||||
|
migrations_history="/config/.migrations"
|
||||||
|
```
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
### Indentation Style
|
||||||
|
You should be using the `Allman Style`. This style puts the brace associated with a control statement on the next line, indented. Statements within the braces are indented to the same level as the braces.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
location ~ ^(.+\.php)(.*)$
|
||||||
|
{
|
||||||
|
# enable the next two lines for http auth
|
||||||
|
# auth_basic "Restricted";
|
||||||
|
# auth_basic_user_file /config/nginx/.htpasswd;
|
||||||
|
|
||||||
|
fastcgi_split_path_info ^(.+\.php)(.*)$;
|
||||||
|
if (!-f $document_root$fastcgi_script_name) { return 404; }
|
||||||
|
fastcgi_pass 127.0.0.1:9000;
|
||||||
|
fastcgi_index index.php;
|
||||||
|
include /etc/nginx/fastcgi_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
# deny access to .htaccess/.htpasswd files
|
||||||
|
location ~ /\.ht
|
||||||
|
{
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
### Spaces Instead Of Tabs
|
||||||
|
When writing your code, set your IDE to utilize **spaces**, with a configured size of `4 characters`. If this project utilizes ESLint, you should find the file `.editorconfig` in the root directory of the repo which defines how the file should be formatted. Load that file into programs such as Visual Studio Code.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
**[`^ back to top ^`](#about)**
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<!-- prettier-ignore-start -->
|
||||||
|
<!-- markdownlint-disable -->
|
||||||
|
|
||||||
|
<!-- BADGE > GENERAL -->
|
||||||
|
[general-npmjs-uri]: https://npmjs.com
|
||||||
|
[general-nodejs-uri]: https://nodejs.org
|
||||||
|
[general-npmtrends-uri]: http://npmtrends.com/thetvapp-docker
|
||||||
|
|
||||||
|
<!-- BADGE > VERSION > GITHUB -->
|
||||||
|
[github-version-img]: https://img.shields.io/github/v/tag/Aetherinox/thetvapp-docker?logo=GitHub&label=Version&color=ba5225
|
||||||
|
[github-version-uri]: https://github.com/Aetherinox/thetvapp-docker/releases
|
||||||
|
|
||||||
|
<!-- BADGE > VERSION > NPMJS -->
|
||||||
|
[npm-version-img]: https://img.shields.io/npm/v/thetvapp-docker?logo=npm&label=Version&color=ba5225
|
||||||
|
[npm-version-uri]: https://npmjs.com/package/thetvapp-docker
|
||||||
|
|
||||||
|
<!-- BADGE > VERSION > PYPI -->
|
||||||
|
[pypi-version-img]: https://img.shields.io/pypi/v/thetvapp-docker-plugin
|
||||||
|
[pypi-version-uri]: https://pypi.org/project/thetvapp-docker-plugin/
|
||||||
|
|
||||||
|
<!-- BADGE > LICENSE > MIT -->
|
||||||
|
[license-mit-img]: https://img.shields.io/badge/MIT-FFF?logo=creativecommons&logoColor=FFFFFF&label=License&color=9d29a0
|
||||||
|
[license-mit-uri]: https://github.com/Aetherinox/thetvapp-docker/blob/main/LICENSE
|
||||||
|
|
||||||
|
<!-- BADGE > GITHUB > DOWNLOAD COUNT -->
|
||||||
|
[github-downloads-img]: https://img.shields.io/github/downloads/Aetherinox/thetvapp-docker/total?logo=github&logoColor=FFFFFF&label=Downloads&color=376892
|
||||||
|
[github-downloads-uri]: https://github.com/Aetherinox/thetvapp-docker/releases
|
||||||
|
|
||||||
|
<!-- BADGE > NPMJS > DOWNLOAD COUNT -->
|
||||||
|
[npmjs-downloads-img]: https://img.shields.io/npm/dw/%40aetherinox%2Fmkdocs-link-embeds?logo=npm&&label=Downloads&color=376892
|
||||||
|
[npmjs-downloads-uri]: https://npmjs.com/package/thetvapp-docker
|
||||||
|
|
||||||
|
<!-- BADGE > GITHUB > DOWNLOAD SIZE -->
|
||||||
|
[github-size-img]: https://img.shields.io/github/repo-size/Aetherinox/thetvapp-docker?logo=github&label=Size&color=59702a
|
||||||
|
[github-size-uri]: https://github.com/Aetherinox/thetvapp-docker/releases
|
||||||
|
|
||||||
|
<!-- BADGE > NPMJS > DOWNLOAD SIZE -->
|
||||||
|
[npmjs-size-img]: https://img.shields.io/npm/unpacked-size/thetvapp-docker/latest?logo=npm&label=Size&color=59702a
|
||||||
|
[npmjs-size-uri]: https://npmjs.com/package/thetvapp-docker
|
||||||
|
|
||||||
|
<!-- BADGE > CODECOV > COVERAGE -->
|
||||||
|
[codecov-coverage-img]: https://img.shields.io/codecov/c/github/Aetherinox/thetvapp-docker?token=MPAVASGIOG&logo=codecov&logoColor=FFFFFF&label=Coverage&color=354b9e
|
||||||
|
[codecov-coverage-uri]: https://codecov.io/github/Aetherinox/thetvapp-docker
|
||||||
|
|
||||||
|
<!-- BADGE > ALL CONTRIBUTORS -->
|
||||||
|
[contribs-all-img]: https://img.shields.io/github/all-contributors/Aetherinox/thetvapp-docker?logo=contributorcovenant&color=de1f6f&label=contributors
|
||||||
|
[contribs-all-uri]: https://github.com/all-contributors/all-contributors
|
||||||
|
|
||||||
|
<!-- BADGE > GITHUB > BUILD > NPM -->
|
||||||
|
[github-build-img]: https://img.shields.io/github/actions/workflow/status/Aetherinox/thetvapp-docker/deploy-docker.yml?logo=github&logoColor=FFFFFF&label=Build&color=%23278b30
|
||||||
|
[github-build-uri]: https://github.com/Aetherinox/thetvapp-docker/actions/workflows/deploy-docker.yml
|
||||||
|
|
||||||
|
<!-- BADGE > GITHUB > BUILD > Pypi -->
|
||||||
|
[github-build-pypi-img]: https://img.shields.io/github/actions/workflow/status/Aetherinox/thetvapp-docker/release-pypi.yml?logo=github&logoColor=FFFFFF&label=Build&color=%23278b30
|
||||||
|
[github-build-pypi-uri]: https://github.com/Aetherinox/thetvapp-docker/actions/workflows/pypi-release.yml
|
||||||
|
|
||||||
|
<!-- BADGE > GITHUB > TESTS -->
|
||||||
|
[github-tests-img]: https://img.shields.io/github/actions/workflow/status/Aetherinox/thetvapp-docker/npm-tests.yml?logo=github&label=Tests&color=2c6488
|
||||||
|
[github-tests-uri]: https://github.com/Aetherinox/thetvapp-docker/actions/workflows/npm-tests.yml
|
||||||
|
|
||||||
|
<!-- BADGE > GITHUB > COMMIT -->
|
||||||
|
[github-commit-img]: https://img.shields.io/github/last-commit/Aetherinox/thetvapp-docker?logo=conventionalcommits&logoColor=FFFFFF&label=Last%20Commit&color=313131
|
||||||
|
[github-commit-uri]: https://github.com/Aetherinox/thetvapp-docker/commits/main/
|
||||||
|
|
||||||
|
<!-- BADGE > BUTTON > SUBMIT ISSUES -->
|
||||||
|
[btn-github-submit-img]: https://img.shields.io/badge/submit%20new%20issue-de1f5c?style=for-the-badge&logo=github&logoColor=FFFFFF
|
||||||
|
[btn-github-submit-uri]: https://github.com/aetherinox/thetvapp-docker/issues
|
||||||
|
|
||||||
|
<!-- prettier-ignore-end -->
|
||||||
|
<!-- markdownlint-restore -->
|
||||||
135
Dockerfile
@@ -1,115 +1,118 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# @project TVApp2
|
|
||||||
# @usage docker image which allows you to download a m3u playlist and EPG guide data from
|
|
||||||
# multiple IPTV services.
|
|
||||||
# @file Dockerfile
|
# @file Dockerfile
|
||||||
# @repo https://github.com/TheBinaryNinja/tvapp2
|
# @about This docker file installs:
|
||||||
# https://git.binaryninja.net/BinaryNinja/tvapp2
|
# - nginx
|
||||||
# https://github.com/aetherinox/docker-base-alpine
|
# - php-fpm
|
||||||
#
|
# - theapptv
|
||||||
# you can build your own image by running
|
|
||||||
# amd64 docker build --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:latest -t tvapp2:1.0.0 -t tvapp2:1.0.0-amd64 -f Dockerfile .
|
|
||||||
# arm64 docker build --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:1.0.0-arm64 -f Dockerfile.aarch64 .
|
|
||||||
#
|
|
||||||
# if you prefer to use `docker buildx`
|
|
||||||
# create docker buildx create --driver docker-container --name container --bootstrap --use
|
|
||||||
# amd64 docker buildx build --no-cache --pull --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:latest -t tvapp2:1.0.0 --platform=linux/amd64 --output type=docker --output type=docker .
|
|
||||||
# arm64 docker buildx build --no-cache --pull --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:latest -t tvapp2:1.0.0 --platform=linux/arm64 --output type=docker --output type=docker .
|
|
||||||
# #
|
# #
|
||||||
|
|
||||||
FROM ghcr.io/aetherinox/alpine-base:3.20-amd64
|
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Set Args
|
# Base Image
|
||||||
|
# This container uses a modified version of the Linux server alpine image
|
||||||
# #
|
# #
|
||||||
|
|
||||||
ARG BUILDDATE
|
FROM ghcr.io/linuxserver/baseimage-alpine:3.20
|
||||||
ARG VERSION
|
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Set Labels
|
# Set Labels
|
||||||
# #
|
# #
|
||||||
|
|
||||||
LABEL maintainer="aetherinox, iFlip721"
|
LABEL maintainer="Aetherinox"
|
||||||
LABEL org.opencontainers.image.authors="aetherinox, iFlip721"
|
LABEL org.opencontainers.image.authors="Aetherinox"
|
||||||
LABEL org.opencontainers.image.vendor="BinaryNinja"
|
LABEL org.opencontainers.image.vendor="Aetherinox"
|
||||||
LABEL org.opencontainers.image.title="TVApp2"
|
LABEL org.opencontainers.image.title="TheTVApp Grabber"
|
||||||
LABEL org.opencontainers.image.description="Automatic m3u and xml guide updater for TheTvApp, TVPass, and MoveOnJoy utilized within your IPTV client."
|
LABEL org.opencontainers.image.description="thetvapp image by Aetherinox"
|
||||||
LABEL org.opencontainers.image.source="https://github.com/TheBinaryNinja/tvapp2"
|
LABEL org.opencontainers.image.source="https://github.com/Aetherinox/thetvapp-docker"
|
||||||
LABEL org.opencontainers.image.repo.1="https://github.com/TheBinaryNinja/tvapp2"
|
LABEL org.opencontainers.image.documentation="https://github.com/Aetherinox/thetvapp-docker"
|
||||||
LABEL org.opencontainers.image.repo.2="https://git.binaryninja.net/BinaryNinja/tvapp2"
|
LABEL org.opencontainers.image.url="https://github.com/Aetherinox/thetvapp-docker"
|
||||||
LABEL org.opencontainers.image.repo.3="https://github.com/aetherinox/docker-base-alpine"
|
|
||||||
LABEL org.opencontainers.image.documentation="https://github.com/TheBinaryNinja/tvapp2/wiki"
|
|
||||||
LABEL org.opencontainers.image.url="https://github.com/TheBinaryNinja/tvapp2/pkgs/container/tvapp2"
|
|
||||||
LABEL org.opencontainers.image.licenses="MIT"
|
LABEL org.opencontainers.image.licenses="MIT"
|
||||||
LABEL BUILDVERSION="TVApp2 v${VERSION} Build ${BUILDDATE}"
|
LABEL build_version="1.0.0"
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Set Env Var
|
# Set Args
|
||||||
# #
|
# #
|
||||||
|
|
||||||
|
ARG BUILD_DATE
|
||||||
|
ARG VERSION
|
||||||
|
ARG NGINX_VERSION
|
||||||
|
ARG CRON_TIME
|
||||||
|
ENV CRON_TIME="0/60 * * * *"
|
||||||
ENV TZ="Etc/UTC"
|
ENV TZ="Etc/UTC"
|
||||||
ENV URL_REPO="https://git.binaryninja.net/BinaryNinja/"
|
|
||||||
ENV WEB_IP="0.0.0.0"
|
ENV URL_XML="https://raw.githubusercontent.com/dtankdempse/thetvapp-m3u/refs/heads/main/guide/epg.xml"
|
||||||
ENV WEB_PORT=4124
|
ENV URL_XML_GZ="https://raw.githubusercontent.com/dtankdempse/thetvapp-m3u/refs/heads/main/guide/epg.xml.gz"
|
||||||
ENV NODE_VERSION=18.20.5
|
ENV URL_M3U="https://thetvapp-m3u.data-search.workers.dev/playlist"
|
||||||
ENV YARN_VERSION=1.22.22
|
ENV FILE_NAME="thetvapp"
|
||||||
ENV DIR_BUILD=/usr/src/app
|
|
||||||
ENV DIR_RUN=/usr/bin/app
|
ENV PORT_HTTP=80
|
||||||
|
ENV PORT_HTTPS=443
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Install
|
# Install
|
||||||
# #
|
# #
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
apk add --no-cache \
|
if [ -z ${NGINX_VERSION+x} ]; then \
|
||||||
wget \
|
NGINX_VERSION=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/v3.20/main/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \
|
||||||
bash \
|
&& awk '/^P:nginx$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://'); \
|
||||||
nano \
|
fi && \
|
||||||
npm \
|
apk add --no-cache \
|
||||||
openssl
|
wget \
|
||||||
|
logrotate \
|
||||||
|
openssl \
|
||||||
|
apache2-utils \
|
||||||
|
nginx \
|
||||||
|
nginx==${NGINX_VERSION} \
|
||||||
|
nginx-mod-http-fancyindex==${NGINX_VERSION} && \
|
||||||
|
echo "**** Install Build Packages ****" && \
|
||||||
|
echo "**** Configure Nginx ****" && \
|
||||||
|
echo 'fastcgi_param HTTP_PROXY ""; # https://httpoxy.org/' >> \
|
||||||
|
/etc/nginx/fastcgi_params && \
|
||||||
|
echo 'fastcgi_param PATH_INFO $fastcgi_path_info; # http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info' >> \
|
||||||
|
/etc/nginx/fastcgi_params && \
|
||||||
|
echo 'fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/#connecting-nginx-to-php-fpm' >> \
|
||||||
|
/etc/nginx/fastcgi_params && \
|
||||||
|
echo 'fastcgi_param SERVER_NAME $host; # Send HTTP_HOST as SERVER_NAME. If HTTP_HOST is blank, send the value of server_name from nginx (default is `_`)' >> \
|
||||||
|
/etc/nginx/fastcgi_params && \
|
||||||
|
rm -f /etc/nginx/http.d/default.conf && \
|
||||||
|
rm -f /etc/nginx/conf.d/stream.conf && \
|
||||||
|
rm -f /config/www/index.html && \
|
||||||
|
echo "**** Setup Logrotate ****" && \
|
||||||
|
sed -i "s#/var/log/messages {}.*# #g" \
|
||||||
|
/etc/logrotate.conf && \
|
||||||
|
sed -i 's#/usr/sbin/logrotate /etc/logrotate.conf#/usr/sbin/logrotate /etc/logrotate.conf -s /config/log/logrotate.status#g' \
|
||||||
|
/etc/periodic/daily/logrotate
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# Copy docker-entrypoint
|
# Set work directory
|
||||||
# #
|
# #
|
||||||
|
|
||||||
COPY docker-entrypoint.sh /usr/local/bin/
|
WORKDIR /config/www
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# copy s6-overlays root to image root
|
# add local files
|
||||||
# #
|
# #
|
||||||
|
|
||||||
COPY root/ /
|
COPY root/ /
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# set work directory
|
# ports and volumes
|
||||||
# #
|
# #
|
||||||
|
|
||||||
WORKDIR ${DIR_BUILD}
|
EXPOSE ${PORT_HTTP} ${PORT_HTTPS}
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# copy tvapp2 project to workdir
|
# Add Cron Task Files
|
||||||
# #
|
# #
|
||||||
|
|
||||||
COPY tvapp2/ ./
|
ADD run.sh /
|
||||||
|
ADD download.sh /
|
||||||
# #
|
|
||||||
# set work dir to built app
|
|
||||||
# #
|
|
||||||
|
|
||||||
WORKDIR ${DIR_RUN}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Ports and volumes
|
|
||||||
# #
|
|
||||||
|
|
||||||
EXPOSE ${WEB_PORT}/tcp
|
|
||||||
|
|
||||||
# #
|
# #
|
||||||
# In case user sets up the cron for a longer duration, do a first run
|
# In case user sets up the cron for a longer duration, do a first run
|
||||||
# and then keep the container running. Hacky, but whatever.
|
# and then keep the container running. Hacky, but whatever.
|
||||||
# #
|
# #
|
||||||
|
|
||||||
ENTRYPOINT ["/init"]
|
CMD ["sh", "-c", "/run.sh ; /download.sh ; tail -f /dev/null"]
|
||||||
|
|||||||
134
Dockerfile-php.template
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
|
# #
|
||||||
|
# @file Dockerfile.IncPhp
|
||||||
|
# @about This docker file installs:
|
||||||
|
# - nginx
|
||||||
|
# - php-fpm
|
||||||
|
# - theapptv
|
||||||
|
# #
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Base Image
|
||||||
|
# This container uses a modified version of the Linux server alpine image
|
||||||
|
# #
|
||||||
|
|
||||||
|
FROM ghcr.io/linuxserver/baseimage-alpine:3.20
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Set Labels
|
||||||
|
# #
|
||||||
|
|
||||||
|
LABEL maintainer="Aetherinox"
|
||||||
|
LABEL org.opencontainers.image.authors="Aetherinox"
|
||||||
|
LABEL org.opencontainers.image.vendor="Aetherinox"
|
||||||
|
LABEL org.opencontainers.image.title="TheTVApp Grabber"
|
||||||
|
LABEL org.opencontainers.image.description="thetvapp image by Aetherinox"
|
||||||
|
LABEL org.opencontainers.image.source="https://github.com/Aetherinox/thetvapp-docker"
|
||||||
|
LABEL org.opencontainers.image.documentation="https://github.com/Aetherinox/thetvapp-docker"
|
||||||
|
LABEL org.opencontainers.image.url="https://github.com/Aetherinox/thetvapp-docker"
|
||||||
|
LABEL org.opencontainers.image.licenses="MIT"
|
||||||
|
LABEL build_version="1.0.0"
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Set Args
|
||||||
|
# #
|
||||||
|
|
||||||
|
ARG BUILD_DATE
|
||||||
|
ARG VERSION
|
||||||
|
ARG NGINX_VERSION
|
||||||
|
ARG CRON_TIME
|
||||||
|
ENV CRON_TIME="0/60 * * * *"
|
||||||
|
ENV TZ="Etc/UTC"
|
||||||
|
|
||||||
|
ENV URL_XML="https://raw.githubusercontent.com/dtankdempse/thetvapp-m3u/refs/heads/main/guide/epg.xml"
|
||||||
|
ENV URL_XML_GZ="https://raw.githubusercontent.com/dtankdempse/thetvapp-m3u/refs/heads/main/guide/epg.xml.gz"
|
||||||
|
ENV URL_M3U="https://thetvapp-m3u.data-search.workers.dev/playlist"
|
||||||
|
ENV FILE_NAME="thetvapp"
|
||||||
|
|
||||||
|
ENV PORT_HTTP=80
|
||||||
|
ENV PORT_HTTPS=443
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Install
|
||||||
|
# #
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
if [ -z ${NGINX_VERSION+x} ]; then \
|
||||||
|
NGINX_VERSION=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/v3.20/main/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \
|
||||||
|
&& awk '/^P:nginx$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://'); \
|
||||||
|
fi && \
|
||||||
|
apk add --no-cache \
|
||||||
|
wget \
|
||||||
|
logrotate \
|
||||||
|
openssl \
|
||||||
|
apache2-utils \
|
||||||
|
nginx \
|
||||||
|
php83 \
|
||||||
|
php83-fileinfo \
|
||||||
|
php83-fpm \
|
||||||
|
php83-mbstring \
|
||||||
|
nginx==${NGINX_VERSION} \
|
||||||
|
nginx-mod-http-fancyindex==${NGINX_VERSION} && \
|
||||||
|
echo "**** Install Build Packages ****" && \
|
||||||
|
echo "**** Configure Nginx ****" && \
|
||||||
|
echo 'fastcgi_param HTTP_PROXY ""; # https://httpoxy.org/' >> \
|
||||||
|
/etc/nginx/fastcgi_params && \
|
||||||
|
echo 'fastcgi_param PATH_INFO $fastcgi_path_info; # http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info' >> \
|
||||||
|
/etc/nginx/fastcgi_params && \
|
||||||
|
echo 'fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/#connecting-nginx-to-php-fpm' >> \
|
||||||
|
/etc/nginx/fastcgi_params && \
|
||||||
|
echo 'fastcgi_param SERVER_NAME $host; # Send HTTP_HOST as SERVER_NAME. If HTTP_HOST is blank, send the value of server_name from nginx (default is `_`)' >> \
|
||||||
|
/etc/nginx/fastcgi_params && \
|
||||||
|
rm -f /etc/nginx/http.d/default.conf && \
|
||||||
|
rm -f /etc/nginx/conf.d/stream.conf && \
|
||||||
|
rm -f /config/www/index.html && \
|
||||||
|
echo "**** Check PHP version and symlink ****" && \
|
||||||
|
if [ "$(readlink /usr/bin/php)" != "php83" ]; then \
|
||||||
|
rm -rf /usr/bin/php && \
|
||||||
|
ln -s /usr/bin/php83 /usr/bin/php; \
|
||||||
|
fi && \
|
||||||
|
echo "**** Configure PHP ****" && \
|
||||||
|
sed -i "s#;error_log = log/php83/error.log.*#error_log = /config/log/php/error.log#g" \
|
||||||
|
/etc/php83/php-fpm.conf && \
|
||||||
|
sed -i "s#user = nobody.*#user = abc#g" \
|
||||||
|
/etc/php83/php-fpm.d/www.conf && \
|
||||||
|
sed -i "s#group = nobody.*#group = abc#g" \
|
||||||
|
/etc/php83/php-fpm.d/www.conf && \
|
||||||
|
echo "**** Setup Logrotate ****" && \
|
||||||
|
sed -i "s#/var/log/messages {}.*# #g" \
|
||||||
|
/etc/logrotate.conf && \
|
||||||
|
sed -i 's#/usr/sbin/logrotate /etc/logrotate.conf#/usr/sbin/logrotate /etc/logrotate.conf -s /config/log/logrotate.status#g' \
|
||||||
|
/etc/periodic/daily/logrotate
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Set work directory
|
||||||
|
# #
|
||||||
|
|
||||||
|
WORKDIR /config/www
|
||||||
|
|
||||||
|
# #
|
||||||
|
# add local files
|
||||||
|
# #
|
||||||
|
|
||||||
|
COPY root/ /
|
||||||
|
|
||||||
|
# #
|
||||||
|
# ports and volumes
|
||||||
|
# #
|
||||||
|
|
||||||
|
EXPOSE ${PORT_HTTP} ${PORT_HTTPS}
|
||||||
|
|
||||||
|
# #
|
||||||
|
# Add Cron Task Files
|
||||||
|
# #
|
||||||
|
|
||||||
|
ADD run.sh /
|
||||||
|
ADD download.sh /
|
||||||
|
|
||||||
|
# #
|
||||||
|
# In case user sets up the cron for a longer duration, do a first run
|
||||||
|
# and then keep the container running. Hacky, but whatever.
|
||||||
|
# #
|
||||||
|
|
||||||
|
CMD ["sh", "-c", "/run.sh ; /download.sh ; tail -f /dev/null"]
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
# syntax=docker/dockerfile:1
|
|
||||||
|
|
||||||
# #
|
|
||||||
# @project TVApp2
|
|
||||||
# @usage docker image which allows you to download a m3u playlist and EPG guide data from
|
|
||||||
# multiple IPTV services.
|
|
||||||
# @file Dockerfile.aarch64
|
|
||||||
# @repo https://github.com/TheBinaryNinja/tvapp2
|
|
||||||
# https://git.binaryninja.net/BinaryNinja/tvapp2
|
|
||||||
# https://github.com/aetherinox/docker-base-alpine
|
|
||||||
#
|
|
||||||
# you can build your own image by running
|
|
||||||
# amd64 docker build --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:latest -t tvapp2:1.0.0 -t tvapp2:1.0.0-amd64 -f Dockerfile .
|
|
||||||
# arm64 docker build --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:1.0.0-arm64 -f Dockerfile.aarch64 .
|
|
||||||
#
|
|
||||||
# if you prefer to use `docker buildx`
|
|
||||||
# create docker buildx create --driver docker-container --name container --bootstrap --use
|
|
||||||
# amd64 docker buildx build --no-cache --pull --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:latest -t tvapp2:1.0.0 --platform=linux/amd64 --output type=docker --output type=docker .
|
|
||||||
# arm64 docker buildx build --no-cache --pull --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:latest -t tvapp2:1.0.0 --platform=linux/arm64 --output type=docker --output type=docker .
|
|
||||||
# #
|
|
||||||
|
|
||||||
FROM ghcr.io/aetherinox/alpine-base:3.20-arm64
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Set Args
|
|
||||||
# #
|
|
||||||
|
|
||||||
ARG BUILDDATE
|
|
||||||
ARG VERSION
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Set Labels
|
|
||||||
# #
|
|
||||||
|
|
||||||
LABEL maintainer="aetherinox, iFlip721"
|
|
||||||
LABEL org.opencontainers.image.authors="aetherinox, iFlip721"
|
|
||||||
LABEL org.opencontainers.image.vendor="BinaryNinja"
|
|
||||||
LABEL org.opencontainers.image.title="TVApp2"
|
|
||||||
LABEL org.opencontainers.image.description="Automatic m3u and xml guide updater for TheTvApp, TVPass, and MoveOnJoy utilized within your IPTV client."
|
|
||||||
LABEL org.opencontainers.image.source="https://github.com/TheBinaryNinja/tvapp2"
|
|
||||||
LABEL org.opencontainers.image.repo.1="https://github.com/TheBinaryNinja/tvapp2"
|
|
||||||
LABEL org.opencontainers.image.repo.2="https://git.binaryninja.net/BinaryNinja/tvapp2"
|
|
||||||
LABEL org.opencontainers.image.repo.3="https://github.com/aetherinox/docker-base-alpine"
|
|
||||||
LABEL org.opencontainers.image.documentation="https://github.com/TheBinaryNinja/tvapp2/wiki"
|
|
||||||
LABEL org.opencontainers.image.url="https://github.com/TheBinaryNinja/tvapp2/pkgs/container/tvapp2"
|
|
||||||
LABEL org.opencontainers.image.licenses="MIT"
|
|
||||||
LABEL BUILDVERSION="TVApp2 v${VERSION} Build ${BUILDDATE}"
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Set Env Var
|
|
||||||
# #
|
|
||||||
|
|
||||||
ENV TZ="Etc/UTC"
|
|
||||||
ENV URL_REPO="https://git.binaryninja.net/BinaryNinja/"
|
|
||||||
ENV WEB_IP="0.0.0.0"
|
|
||||||
ENV WEB_PORT=4124
|
|
||||||
ENV NODE_VERSION=18.20.5
|
|
||||||
ENV YARN_VERSION=1.22.22
|
|
||||||
ENV DIR_BUILD=/usr/src/app
|
|
||||||
ENV DIR_RUN=/usr/bin/app
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Install
|
|
||||||
# #
|
|
||||||
|
|
||||||
RUN \
|
|
||||||
apk add --no-cache \
|
|
||||||
wget \
|
|
||||||
bash \
|
|
||||||
nano \
|
|
||||||
npm \
|
|
||||||
openssl
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Copy docker-entrypoint
|
|
||||||
# #
|
|
||||||
|
|
||||||
COPY docker-entrypoint.sh /usr/local/bin/
|
|
||||||
|
|
||||||
# #
|
|
||||||
# copy s6-overlays root to image root
|
|
||||||
# #
|
|
||||||
|
|
||||||
COPY root/ /
|
|
||||||
|
|
||||||
# #
|
|
||||||
# set work directory
|
|
||||||
# #
|
|
||||||
|
|
||||||
WORKDIR ${DIR_BUILD}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# copy tvapp2 project to workdir
|
|
||||||
# #
|
|
||||||
|
|
||||||
COPY tvapp2/ ./
|
|
||||||
|
|
||||||
# #
|
|
||||||
# set work dir to built app
|
|
||||||
# #
|
|
||||||
|
|
||||||
WORKDIR ${DIR_RUN}
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Ports and volumes
|
|
||||||
# #
|
|
||||||
|
|
||||||
EXPOSE ${WEB_PORT}/tcp
|
|
||||||
|
|
||||||
# #
|
|
||||||
# In case user sets up the cron for a longer duration, do a first run
|
|
||||||
# and then keep the container running. Hacky, but whatever.
|
|
||||||
# #
|
|
||||||
|
|
||||||
ENTRYPOINT ["/init"]
|
|
||||||
2
LICENSE
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2025 BinaryNinja
|
Gistr - Copyright (c) 2025 Aetherinox
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
# #
|
|
||||||
# TVApp2 Docker-compose.yml
|
|
||||||
#
|
|
||||||
# Automatic M3U playlist and XML guide updater for TheTvApp, TVPass, and MoveOnJoy utilized within your IPTV client.
|
|
||||||
#
|
|
||||||
# @url https://github.com/TheBinaryNinja/tvapp2
|
|
||||||
# https://git.binaryninja.net/BinaryNinja/tvapp2
|
|
||||||
#
|
|
||||||
# @image:github ghcr.io/thebinaryninja/tvapp2:latest
|
|
||||||
# ghcr.io/thebinaryninja/tvapp2:amd64
|
|
||||||
# ghcr.io/thebinaryninja/tvapp2:arm64
|
|
||||||
#
|
|
||||||
# @image:dockerhub thebinaryninja/tvapp2:latest
|
|
||||||
# thebinaryninja/tvapp2:1.0.0-amd64
|
|
||||||
# thebinaryninja/tvapp2:1.0.0-arm64
|
|
||||||
#
|
|
||||||
# @image:gitea git.binaryninja.net/binaryninja/tvapp2:latest
|
|
||||||
# git.binaryninja.net/binaryninja/tvapp2:1.0.0-amd64
|
|
||||||
# git.binaryninja.net/binaryninja/tvapp2:1.0.0-arm64
|
|
||||||
# #
|
|
||||||
|
|
||||||
services:
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Service > TVApp2
|
|
||||||
# #
|
|
||||||
|
|
||||||
tvapp2:
|
|
||||||
container_name: tvapp2
|
|
||||||
image: ghcr.io/thebinaryninja/tvapp2:latest # Image: Github
|
|
||||||
# image: thebinaryninja/tvapp2:latest # Image: Dockerhub
|
|
||||||
# image: git.binaryninja.net/binaryninja/tvapp2:latest # Image: Gitea
|
|
||||||
# image: tvapp2:latest # Image: Locally built
|
|
||||||
hostname: tvapp2
|
|
||||||
environment:
|
|
||||||
TZ: "Etc/UTC"
|
|
||||||
volumes:
|
|
||||||
- /etc/timezone:/etc/timezone:ro
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
- ./config:/config
|
|
||||||
- ./app:/usr/bin/app
|
|
||||||
ulimits:
|
|
||||||
memlock:
|
|
||||||
soft: -1
|
|
||||||
hard: -1
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# #
|
|
||||||
# @project TVApp2
|
|
||||||
# @usage docker image which allows you to download a m3u playlist and EPG guide data from
|
|
||||||
# multiple IPTV services.
|
|
||||||
# @file docker-entrypoint.sh
|
|
||||||
# @repo https://github.com/TheBinaryNinja/tvapp2
|
|
||||||
# https://git.binaryninja.net/BinaryNinja/tvapp2
|
|
||||||
# https://github.com/aetherinox/docker-base-alpine
|
|
||||||
#
|
|
||||||
# you can build your own image by running
|
|
||||||
# amd64 docker build --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:latest -t tvapp2:1.0.0 -t tvapp2:1.0.0-amd64 -f Dockerfile .
|
|
||||||
# arm64 docker build --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:1.0.0-arm64 -f Dockerfile.aarch64 .
|
|
||||||
#
|
|
||||||
# if you prefer to use `docker buildx`
|
|
||||||
# create docker buildx create --driver docker-container --name container --bootstrap --use
|
|
||||||
# amd64 docker buildx build --no-cache --pull --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:latest -t tvapp2:1.0.0 --platform=linux/amd64 --output type=docker --output type=docker .
|
|
||||||
# arm64 docker buildx build --no-cache --pull --build-arg VERSION=1.0.0 --build-arg BUILDDATE=20250218 -t tvapp2:latest -t tvapp2:1.0.0 --platform=linux/arm64 --output type=docker --output type=docker .
|
|
||||||
# #
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Run command with node if the first argument contains a "-" or is not a system command. The last
|
|
||||||
# part inside the "{}" is a workaround for the following bug in ash/dash:
|
|
||||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=874264
|
|
||||||
if [ "${1#-}" != "${1}" ] || [ -z "$(command -v "${1}")" ] || { [ -f "${1}" ] && ! [ -x "${1}" ]; }; then
|
|
||||||
set -- node "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
||||||
2
docs/.gitattributes
vendored
@@ -1,2 +0,0 @@
|
|||||||
# Enforce Unix newlines
|
|
||||||
* text=auto eol=lf
|
|
||||||
75
docs/.gitignore
vendored
@@ -1,75 +0,0 @@
|
|||||||
# #
|
|
||||||
# Copyright (c) 2025 Aetherinox
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to
|
|
||||||
# deal in the Software without restriction, including without limitation the
|
|
||||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
# sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
# IN THE SOFTWARE.
|
|
||||||
# #
|
|
||||||
|
|
||||||
# #
|
|
||||||
# Node, TypeScript, Python
|
|
||||||
# #
|
|
||||||
|
|
||||||
# Dependencies
|
|
||||||
node_modules
|
|
||||||
__pycache__
|
|
||||||
venv
|
|
||||||
.venv
|
|
||||||
|
|
||||||
# Build files
|
|
||||||
build
|
|
||||||
site
|
|
||||||
|
|
||||||
# Distribution files
|
|
||||||
dist
|
|
||||||
mkdocs_material.egg-info
|
|
||||||
|
|
||||||
# Caches and logs
|
|
||||||
*.cpuprofile
|
|
||||||
*.log
|
|
||||||
*.tsbuildinfo
|
|
||||||
.cache
|
|
||||||
.eslintcache
|
|
||||||
__pycache__
|
|
||||||
|
|
||||||
# Examples
|
|
||||||
example
|
|
||||||
example.zip
|
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
# General
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Never ignore .gitkeep files
|
|
||||||
!**/.gitkeep
|
|
||||||
|
|
||||||
# macOS internals
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# Temporary files
|
|
||||||
TODO
|
|
||||||
tmp
|
|
||||||
|
|
||||||
# IDEs & Editors
|
|
||||||
.idea
|
|
||||||
*~
|
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
# Misc
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
encryptcontent.cache
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
title: Changelog
|
|
||||||
tags:
|
|
||||||
- changelog
|
|
||||||
---
|
|
||||||
|
|
||||||
# Changelog
|
|
||||||
|
|
||||||
<p align="center" markdown="1">
|
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
</p>
|
|
||||||
|
|
||||||
### <!-- md:version stable- --> 1.0.0 <small>Feb 24, 2025</small> { id="1.0.0" }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<br />
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
# Conventions
|
|
||||||
This documentation use some symbols for illustration purposes. Before you read
|
|
||||||
on, please make sure you've made yourself familiar with the following list of
|
|
||||||
conventions:
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:version --> Release Type { data-toc-label="Version" }
|
|
||||||
|
|
||||||
The tag symbol in conjunction with a version number denotes when a specific feature or behavior was added. Make sure you're at least on this version if you want to use it.
|
|
||||||
|
|
||||||
: <!-- md:version stable- --> stable
|
|
||||||
: <!-- md:version beta- --> beta
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:control --> Controls { #default data-toc-label="Control" }
|
|
||||||
|
|
||||||
These icons define what type of control a specified setting uses.
|
|
||||||
|
|
||||||
: <!-- md:control toggle --> toggle
|
|
||||||
: <!-- md:control textbox --> textbox
|
|
||||||
: <!-- md:control dropdown --> dropdown
|
|
||||||
: <!-- md:control button --> button
|
|
||||||
: <!-- md:control slider --> slider
|
|
||||||
: <!-- md:control color --> color wheel
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:default --> – Default Value { #default data-toc-label="Default value" }
|
|
||||||
|
|
||||||
This defines what the default value for a setting is.
|
|
||||||
|
|
||||||
: <!-- md:default --> Specified setting has a default value
|
|
||||||
: <!-- md:default none --> Specified setting has no default value and is empty
|
|
||||||
: <!-- md:default computed --> Specified setting is automatically computed by the app
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:command --> – Command { #command data-toc-label="Command" }
|
|
||||||
|
|
||||||
This defines a command
|
|
||||||
|
|
||||||
: <!-- md:command --> Specified setting has a default value
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:flag experimental --> – Experimental { data-toc-label="Experimental" }
|
|
||||||
|
|
||||||
Anything listed with this icon are features or functionality that are still in development and may change in future versions.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:flag required --> – Required value { #required data-toc-label="Required value" }
|
|
||||||
|
|
||||||
Items listed with this symbol indicate that they are required to be set.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:flag customization --> – Customization { #customization data-toc-label="Customization" }
|
|
||||||
|
|
||||||
This symbol denotes that the item described is a customization which affects the overall look of the app.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:3rdparty --> – 3rd Party { data-toc-label="3rd Party" }
|
|
||||||
|
|
||||||
This symbol denotes that the item described is classified as something that changes the overall functionality of the plugin.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:flag metadata --> – Metadata property { #metadata data-toc-label="Metadata property" }
|
|
||||||
|
|
||||||
This symbol denotes that the item described is a metadata property, which can
|
|
||||||
be used in Markdown documents as part of the front matter definition.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:flag setting --> – Configurable Setting { #setting data-toc-label="Configurable Setting" }
|
|
||||||
|
|
||||||
This symbol denotes that an item is configurable by the user
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:flag multiple --> – Multiple instances { #multiple-instances data-toc-label="Multiple instances" }
|
|
||||||
|
|
||||||
This symbol denotes that the plugin supports multiple instances, i.e, that it
|
|
||||||
can be used multiple times in the `plugins` setting in `mkdocs.yml`.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:feature --> – Optional feature { #feature data-toc-label="Optional feature" }
|
|
||||||
|
|
||||||
Most of the features are hidden behind feature flags, which means they must
|
|
||||||
be explicitly enabled via `mkdocs.yml`. This allows for the existence of
|
|
||||||
potentially orthogonal features.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
### <!-- md:backers --> – Backers only { data-toc-label="Backers only" }
|
|
||||||
|
|
||||||
The pumping heart symbol denotes that a specific feature or behavior is only
|
|
||||||
available to backers. Normal users will not have access to this particular item.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<br />
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# License
|
|
||||||
|
|
||||||
**MIT License**
|
|
||||||
|
|
||||||
Copyright (c) 2025 Aetherinox
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to
|
|
||||||
deal in the Software without restriction, including without limitation the
|
|
||||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
IN THE SOFTWARE.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<br />
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# Tags
|
|
||||||
|
|
||||||
Following is a list of relevant tags:
|
|
||||||
|
|
||||||
<!-- material/tags -->
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<br />
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
title: About TVApp2
|
|
||||||
tags:
|
|
||||||
- info
|
|
||||||
---
|
|
||||||
|
|
||||||
# About TVApp2
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
Before Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 193 KiB |
@@ -1,16 +0,0 @@
|
|||||||
authors:
|
|
||||||
Aetherinox:
|
|
||||||
name: Aetherinox
|
|
||||||
description: Developer
|
|
||||||
avatar: https://avatars.githubusercontent.com/u/118329232
|
|
||||||
url: https://github.com/Aetherinox
|
|
||||||
iflip721:
|
|
||||||
name: iflip721
|
|
||||||
description: Developer
|
|
||||||
avatar: https://avatars.githubusercontent.com/u/28721588
|
|
||||||
url: https://github.com/iflip721
|
|
||||||
Optx:
|
|
||||||
name: Optx
|
|
||||||
description: Developer
|
|
||||||
avatar: https://avatars.githubusercontent.com/u/32874812
|
|
||||||
url: https://github.com/Nvmdfth
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
comments: true
|
|
||||||
hide:
|
|
||||||
- feedback
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
# Blog
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
---
|
|
||||||
title: Home
|
|
||||||
tags:
|
|
||||||
- home
|
|
||||||
---
|
|
||||||
|
|
||||||
<p align="center"><img src="https://techcrunch.com/wp-content/uploads/2017/10/roku-live-tv-screen-1600x900.png" width="860"></p>
|
|
||||||
<h1 align="center"><b>TVApp2</b></h1>
|
|
||||||
|
|
||||||
<p align="center" markdown="1">
|
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
</p>
|
|
||||||
|
|
||||||
This documentation is related to the github repository for <a href="https://github.com/TheBinaryNinja/tvapp2">TVApp2</a>; a NodeJS powered application which allows you to fetch M3U playlists and EPG guide data from various popular online IPTV services such as TheTvApp, TVPass, and MoveOnJoy. These services provide high-quality and premium channels available as Live TV.
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
This documentation covers the following:
|
|
||||||
|
|
||||||
- How to install and configure TVApp2
|
|
||||||
- Managing your TVApp2 docker image
|
|
||||||
- Building your own docker image
|
|
||||||
- Traefik and Authentik Integration
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<br />
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
---
|
|
||||||
template: home.html
|
|
||||||
title: TVApp2
|
|
||||||
social:
|
|
||||||
cards_layout_options:
|
|
||||||
title: TVApp2
|
|
||||||
---
|
|
||||||
|
|
||||||
Welcome to the TVApp2 documentation
|
|
||||||
BIN
docs/img/002.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 636 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 38 KiB |
BIN
docs/img/banner-sq.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
docs/img/banner.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
@@ -1,23 +0,0 @@
|
|||||||
# #
|
|
||||||
# Copyright (c) 2025 Aetherinox
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to
|
|
||||||
# deal in the Software without restriction, including without limitation the
|
|
||||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
# sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
# IN THE SOFTWARE.
|
|
||||||
# #
|
|
||||||
|
|
||||||
__version__ = "9.5.13"
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
# #
|
|
||||||
# Copyright (c) 2025 Aetherinox
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to
|
|
||||||
# deal in the Software without restriction, including without limitation the
|
|
||||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
# sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
# IN THE SOFTWARE.
|
|
||||||
# #
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
# #
|
|
||||||
# Copyright (c) 2025 Aetherinox
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to
|
|
||||||
# deal in the Software without restriction, including without limitation the
|
|
||||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
# sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
# IN THE SOFTWARE.
|
|
||||||
# #
|
|
||||||
|
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import codecs
|
|
||||||
import functools
|
|
||||||
import material
|
|
||||||
import os
|
|
||||||
|
|
||||||
from glob import iglob
|
|
||||||
from inspect import getfile
|
|
||||||
from markdown import Markdown
|
|
||||||
from pymdownx import emoji, twemoji_db
|
|
||||||
from xml.etree.ElementTree import Element
|
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
# Functions
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Create twemoji index
|
|
||||||
def twemoji(options: object, md: Markdown):
|
|
||||||
paths = options.get("custom_icons", [])[:]
|
|
||||||
return _load_twemoji_index(tuple(paths))
|
|
||||||
|
|
||||||
# Create emoji or icon
|
|
||||||
def to_svg(
|
|
||||||
index: str, shortname: str, alias: str, uc: str | None, alt: str,
|
|
||||||
title: str, category: str, options: object, md: Markdown
|
|
||||||
):
|
|
||||||
if not uc:
|
|
||||||
icons = md.inlinePatterns["emoji"].emoji_index["emoji"]
|
|
||||||
|
|
||||||
# Create and return element to host icon
|
|
||||||
el = Element("span", { "class": options.get("classes", index) })
|
|
||||||
el.text = md.htmlStash.store(_load(icons[shortname]["path"]))
|
|
||||||
return el
|
|
||||||
|
|
||||||
# Delegate to `pymdownx.emoji` extension
|
|
||||||
return emoji.to_svg(
|
|
||||||
index, shortname, alias, uc, alt, title, category, options, md
|
|
||||||
)
|
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
# Helper functions
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Load icon
|
|
||||||
@functools.lru_cache(maxsize = None)
|
|
||||||
def _load(file: str):
|
|
||||||
with codecs.open(file, encoding = "utf-8") as f:
|
|
||||||
return f.read()
|
|
||||||
|
|
||||||
# Load twemoji index and add icons
|
|
||||||
@functools.lru_cache(maxsize = None)
|
|
||||||
def _load_twemoji_index(paths):
|
|
||||||
index = {
|
|
||||||
"name": "twemoji",
|
|
||||||
"emoji": twemoji_db.emoji,
|
|
||||||
"aliases": twemoji_db.aliases
|
|
||||||
}
|
|
||||||
|
|
||||||
# Compute path to theme root and traverse all icon directories
|
|
||||||
root = os.path.dirname(getfile(material))
|
|
||||||
root = os.path.join(root, "templates", ".icons")
|
|
||||||
for path in [*paths, root]:
|
|
||||||
base = os.path.normpath(path)
|
|
||||||
|
|
||||||
# Index icons provided by the theme and via custom icons
|
|
||||||
glob = os.path.join(base, "**", "*.svg")
|
|
||||||
glob = iglob(os.path.normpath(glob), recursive = True)
|
|
||||||
for file in glob:
|
|
||||||
icon = file[len(base) + 1:-4].replace(os.path.sep, "-")
|
|
||||||
|
|
||||||
# Add icon to index
|
|
||||||
name = f":{icon}:"
|
|
||||||
if not any(name in index[key] for key in ["emoji", "aliases"]):
|
|
||||||
index["emoji"][name] = { "name": name, "path": file }
|
|
||||||
|
|
||||||
# Return index
|
|
||||||
return index
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M162.4 6c-1.5-3.6-5-6-8.9-6h-19c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6H48C21.5 0 0 21.5 0 48V256v22.4V288H9.6 374.4 384v-9.6V256 48c0-26.5-21.5-48-48-48H230.5c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6z"/><path class="fa-primary" d="M0 288H384v32c0 35.3-28.7 64-64 64H256v64c0 35.3-28.7 64-64 64s-64-28.7-64-64V384H64c-35.3 0-64-28.7-64-64V288zM192 464a16 16 0 1 0 0-32 16 16 0 1 0 0 32z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 767 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M432 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 112a80 80 0 1 0 0-160 80 80 0 1 0 0 160z"/><path class="fa-primary" d="M0 320C0 426 86 512 192 512s192-86 192-192c0-91.2-130.2-262.3-166.6-308.3C211.4 4.2 202.5 0 192.9 0h-1.8c-9.6 0-18.5 4.2-24.5 11.7C130.2 57.7 0 228.8 0 320z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 594 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zm75.3-267.3c-6.2-6.2-16.4-6.2-22.6 0l-128 128c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l128-128c6.2-6.2 6.2-16.4 0-22.6zM136 288a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM248 400a24 24 0 1 0 0-48 24 24 0 1 0 0 48z"/><path class="fa-primary" d="M267.3 267.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-128 128c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l128-128zM160 264a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM272 376a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 921 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M320 512c53.2 0 101.4-21.6 136.1-56.6l-298.3-235C140 257.1 128 292.3 128 320c0 106 86 192 192 192zM205.8 136L505.2 370.7c4.4-16.1 6.8-33.1 6.8-50.7c0-91.2-130.2-262.3-166.6-308.3C339.4 4.2 330.5 0 320.9 0h-1.8c-9.6 0-18.5 4.2-24.5 11.7C277.8 33 240.7 81.3 205.8 136zM224 336c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16s16 7.2 16 16z"/><path class="fa-primary" d="M5.1 9.2C13.3-1.2 28.4-3.1 38.8 5.1l592 464c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 867 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z"/><path class="fa-primary" d="M80 320c8.8 0 16 7.2 16 16c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 761 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M576 128V384H64V128H576zM64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H576c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64z"/><path class="fa-primary" d="M104 184c0-13.3 10.7-24 24-24s24 10.7 24 24V328c0 13.3-10.7 24-24 24s-24-10.7-24-24V184z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 571 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M576 128V384H64V128H576zM64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H576c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64z"/><path class="fa-primary" d="M205.9 174.3c-3.9-8.7-12.4-14.3-21.9-14.3s-18.1 5.6-21.9 14.3l-64 144c-5.4 12.1 .1 26.3 12.2 31.7s26.3-.1 31.7-12.2l4.3-9.7h75.5l4.3 9.7c5.4 12.1 19.6 17.6 31.7 12.2s17.6-19.6 12.2-31.7l-64-144zM200.4 280H167.6L184 243.1 200.4 280zM304 184v8 64 64 8c0 13.3 10.7 24 24 24h68c33.1 0 60-26.9 60-60c0-18.6-8.5-35.3-21.8-46.3c3.7-7.8 5.8-16.5 5.8-25.7c0-33.1-26.9-60-60-60H328c-13.3 0-24 10.7-24 24zm48 24h28c6.6 0 12 5.4 12 12s-5.4 12-12 12H352V208zm0 96V280h28 16c6.6 0 12 5.4 12 12s-5.4 12-12 12H352z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 981 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M325.5 192L32 192c-17.7 0-32-14.3-32-32s14.3-32 32-32H325.5c-3.5 10-5.5 20.8-5.5 32s1.9 22 5.5 32zM186.5 384c3.5-10 5.5-20.8 5.5-32s-1.9-22-5.5-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H186.5z"/><path class="fa-primary" d="M416 192a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0-128a96 96 0 1 0 0 192 96 96 0 1 0 0-192zM96 384a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0-128a96 96 0 1 0 0 192 96 96 0 1 0 0-192z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 717 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M64 480c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64zM224 352c6.7 0 13-2.8 17.6-7.7l104-112c6.5-7 8.2-17.2 4.4-25.9s-12.5-14.4-22-14.4H120c-9.5 0-18.2 5.7-22 14.4s-2.1 18.9 4.4 25.9l104 112c4.5 4.9 10.9 7.7 17.6 7.7z"/><path class="fa-primary" d="M241.6 344.3c-4.5 4.9-10.9 7.7-17.6 7.7s-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4H328c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 786 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M192 128c-70.7 0-128 57.3-128 128s57.3 128 128 128H384c70.7 0 128-57.3 128-128s-57.3-128-128-128H192zM384 64c106 0 192 86 192 192s-86 192-192 192H192C86 448 0 362 0 256S86 64 192 64H384z"/><path class="fa-primary" d="M192 128a128 128 0 1 0 0 256 128 128 0 1 0 0-256z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 588 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M192 64C86 64 0 150 0 256S86 448 192 448H384c106 0 192-86 192-192s-86-192-192-192H192zm192 64a128 128 0 1 1 0 256 128 128 0 1 1 0-256z"/><path class="fa-primary" d="M384 128a128 128 0 1 0 0 256 128 128 0 1 0 0-256z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 536 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M192 128c-70.7 0-128 57.3-128 128s57.3 128 128 128H384c70.7 0 128-57.3 128-128s-57.3-128-128-128H192zM384 64c106 0 192 86 192 192s-86 192-192 192H192C86 448 0 362 0 256S86 64 192 64H384z"/><path class="fa-primary" d="M96 256a96 96 0 1 0 192 0A96 96 0 1 0 96 256z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 584 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M192 64C86 64 0 150 0 256S86 448 192 448H384c106 0 192-86 192-192s-86-192-192-192H192zm192 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"/><path class="fa-primary" d="M288 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 529 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M64 32C28.7 32 0 60.7 0 96V256 416c0 35.3 28.7 64 64 64H192c70.7 0 128-57.3 128-128c0-46.5-24.8-87.3-62-109.7c18.7-22.3 30-51 30-82.3c0-70.7-57.3-128-128-128H64zm96 192H64V96h96c35.3 0 64 28.7 64 64s-28.7 64-64 64zM64 288h96 32c35.3 0 64 28.7 64 64s-28.7 64-64 64H64V288z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 519 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M50.7 58.5L0 160H208V32H93.7C75.5 32 58.9 42.3 50.7 58.5zM240 160H448L397.3 58.5C389.1 42.3 372.5 32 354.3 32H240V160zm208 32H0V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V192z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 430 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M162.4 6c-1.5-3.6-5-6-8.9-6h-19c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6H48C21.5 0 0 21.5 0 48V224v22.4V256H9.6 374.4 384v-9.6V224 48c0-26.5-21.5-48-48-48H230.5c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 288v32c0 35.3 28.7 64 64 64h64v64c0 35.3 28.7 64 64 64s64-28.7 64-64V384h64c35.3 0 64-28.7 64-64V288H0zM192 432a16 16 0 1 1 0 32 16 16 0 1 1 0-32z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 657 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 531 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M128 40c0-22.1 17.9-40 40-40s40 17.9 40 40V188.2c8.5-7.6 19.7-12.2 32-12.2c20.6 0 38.2 13 45 31.2c8.8-9.3 21.2-15.2 35-15.2c25.3 0 46 19.5 47.9 44.3c8.5-7.7 19.8-12.3 32.1-12.3c26.5 0 48 21.5 48 48v48 16 48c0 70.7-57.3 128-128 128l-16 0H240l-.1 0h-5.2c-5 0-9.9-.3-14.7-1c-55.3-5.6-106.2-34-140-79L8 336c-13.3-17.7-9.7-42.7 8-56s42.7-9.7 56 8l56 74.7V40zM240 304c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304zm48-16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 846 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M64 128V384H576V128H64zM0 128C0 92.7 28.7 64 64 64H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zm144 56V328c0 13.3-10.7 24-24 24s-24-10.7-24-24V184c0-13.3 10.7-24 24-24s24 10.7 24 24z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 465 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M64 128V384H576V128H64zM0 128C0 92.7 28.7 64 64 64H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zm184 32c9.5 0 18.1 5.6 21.9 14.3l64 144c5.4 12.1-.1 26.3-12.2 31.7s-26.3-.1-31.7-12.2l-4.3-9.7H146.3l-4.3 9.7c-5.4 12.1-19.6 17.6-31.7 12.2s-17.6-19.6-12.2-31.7l64-144c3.9-8.7 12.4-14.3 21.9-14.3zm0 83.1L167.6 280h32.8L184 243.1zM304 184c0-13.3 10.7-24 24-24h52c33.1 0 60 26.9 60 60c0 9.2-2.1 17.9-5.8 25.7c13.3 11 21.8 27.6 21.8 46.3c0 33.1-26.9 60-60 60H328c-13.3 0-24-10.7-24-24v-8V256 192v-8zm48 24v24h28c6.6 0 12-5.4 12-12s-5.4-12-12-12H352zm0 96h44c6.6 0 12-5.4 12-12s-5.4-12-12-12H380 352v24z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 877 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM448 192V416H64V192H448zM436.7 96c7.1 0 10.7 8.6 5.7 13.7l-36.7 36.7c-3.1 3.1-8.2 3.1-11.3 0l-36.7-36.7c-5-5-1.5-13.7 5.7-13.7h73.4zM128 232c-13.3 0-24 10.7-24 24s10.7 24 24 24H384c13.3 0 24-10.7 24-24s-10.7-24-24-24H128zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24H384c13.3 0 24-10.7 24-24s-10.7-24-24-24H128z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 659 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M512 256c0 .9 0 1.8 0 2.7c-.4 36.5-33.6 61.3-70.1 61.3H344c-26.5 0-48 21.5-48 48c0 3.4 .4 6.7 1 9.9c2.1 10.2 6.5 20 10.8 29.9c6.1 13.8 12.1 27.5 12.1 42c0 31.8-21.6 60.7-53.4 62c-3.5 .1-7 .2-10.6 .2C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 671 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 531 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 447 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M345 39.1L472.8 168.4c52.4 53 52.4 138.2 0 191.2L360.8 472.9c-9.3 9.4-24.5 9.5-33.9 .2s-9.5-24.5-.2-33.9L438.6 325.9c33.9-34.3 33.9-89.4 0-123.7L310.9 72.9c-9.3-9.4-9.2-24.6 .2-33.9s24.6-9.2 33.9 .2zM0 229.5V80C0 53.5 21.5 32 48 32H197.5c17 0 33.3 6.7 45.3 18.7l168 168c25 25 25 65.5 0 90.5L277.3 442.7c-25 25-65.5 25-90.5 0l-168-168C6.7 262.7 0 246.5 0 229.5zM144 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 652 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M192 384a128 128 0 1 1 0-256 128 128 0 1 1 0 256zm0 64H384c106 0 192-86 192-192s-86-192-192-192H192C86 64 0 150 0 256S86 448 192 448zm143.1-64c30.4-34 48.9-78.8 48.9-128s-18.5-94-48.9-128H384c70.7 0 128 57.3 128 128s-57.3 128-128 128H335.1z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 488 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M192 64C86 64 0 150 0 256S86 448 192 448H384c106 0 192-86 192-192s-86-192-192-192H192zm192 64a128 128 0 1 1 0 256 128 128 0 1 1 0-256z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 382 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M384 128c70.7 0 128 57.3 128 128s-57.3 128-128 128H192c-70.7 0-128-57.3-128-128s57.3-128 128-128H384zM576 256c0-106-86-192-192-192H192C86 64 0 150 0 256S86 448 192 448H384c106 0 192-86 192-192zM192 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 486 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M192 64C86 64 0 150 0 256S86 448 192 448H384c106 0 192-86 192-192s-86-192-192-192H192zm192 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 378 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M320 96v320a160.019 160.019 0 0 0 113.138-46.862 160.019 160.019 0 0 0 34.683-174.367 160.006 160.006 0 0 0-86.591-86.592A160.019 160.019 0 0 0 320 96ZM0 256l160.002 160 160.001-160L160.002 96 0 256Zm480 0a160 160 0 0 0 160 160V96a160.002 160.002 0 0 0-160 160Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 551 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.4 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M423.9 255.8 411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 985 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.0 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="m248 167.5 64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 477 B |