mirror of
https://github.com/TheBinaryNinja/tvapp2.git
synced 2026-06-05 15:15:41 -04:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
bd41ab603d
|
|||
|
0059431fbb
|
|||
|
863addce39
|
|||
|
07b7272eb1
|
|||
|
c59de1fcf9
|
|||
|
2d24d8e379
|
|||
|
60fd32e4d5
|
|||
|
f32504e76b
|
|||
|
8eed126fa4
|
|||
| 9242cbccc4 | |||
|
|
a7d209b370 | ||
|
29c1b6286f
|
|||
|
|
1ae4ab46d4 | ||
| cd33470b12 | |||
| 083feeef90 | |||
| 42f6267539 | |||
|
|
5f669092c2 | ||
| 9a36aad9cb | |||
| 898983f724 | |||
|
c35a726e93
|
|||
|
9cda4061d5
|
1
.github/ISSUE_TEMPLATE/roadmap.yml
vendored
1
.github/ISSUE_TEMPLATE/roadmap.yml
vendored
@@ -41,6 +41,7 @@ body:
|
||||
- Distribution
|
||||
- Documentation
|
||||
- M3U / EPG Functionality
|
||||
- Refactor (Code)
|
||||
- Repository
|
||||
- S6-Overlay
|
||||
default: 0
|
||||
|
||||
86
.github/workflows/deploy-docker-dockerhub.yml
vendored
86
.github/workflows/deploy-docker-dockerhub.yml
vendored
@@ -62,18 +62,6 @@ on:
|
||||
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
|
||||
|
||||
# #
|
||||
# Registry Name
|
||||
#
|
||||
@@ -163,8 +151,7 @@ on:
|
||||
|
||||
env:
|
||||
IMAGE_NAME: ${{ github.event.inputs.IMAGE_NAME || 'tvapp2' }}
|
||||
IMAGE_VERSION: ${{ github.event.inputs.IMAGE_VERSION || '1.0.0' }}
|
||||
IMAGE_REGISTRY: ${{ github.event.inputs.IMAGE_VERSION || 'dockerhub' }}
|
||||
IMAGE_REGISTRY: ${{ github.event.inputs.IMAGE_REGISTRY || 'dockerhub' }}
|
||||
IMAGE_DOCKERHUB_AUTHOR: ${{ github.event.inputs.IMAGE_DOCKERHUB_AUTHOR || 'thebinaryninja' }}
|
||||
IMAGE_DOCKERHUB_USERNAME: ${{ github.event.inputs.IMAGE_DOCKERHUB_USERNAME || 'thebinaryninja' }}
|
||||
IMAGE_ALPINE_VERSION: ${{ github.event.inputs.IMAGE_ALPINE_VERSION || '3.22' }}
|
||||
@@ -198,6 +185,8 @@ jobs:
|
||||
# runs-on: ubuntu-latest
|
||||
runs-on: apollo-x64
|
||||
timeout-minutes: 4
|
||||
outputs:
|
||||
package_version: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }}
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
@@ -223,6 +212,26 @@ jobs:
|
||||
uses: qoomon/actions--context@v4
|
||||
id: 'context'
|
||||
|
||||
# #
|
||||
# Release › Tags › Set › Package.json › Version
|
||||
# #
|
||||
|
||||
- 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
|
||||
echo "PACKAGE_VERSION=${VER}" >> $GITHUB_ENV
|
||||
|
||||
# #
|
||||
# Initialize › Get › Package.json › Version
|
||||
# #
|
||||
|
||||
- name: '👁️🗨️ Package Version › Get'
|
||||
run: |
|
||||
echo "VERSION: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }}"
|
||||
|
||||
# #
|
||||
# Release › Tags › Start
|
||||
# #
|
||||
@@ -259,10 +268,10 @@ jobs:
|
||||
SHA1_GH="$(echo ${GITHUB_SHA})" # 71fad013cfce9116ec62779e4a7e627fe4c33627
|
||||
echo "SHA1_GH=${SHA1_GH}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
echo "PKG_VER_1DIGIT=${PKG_VER_1DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
echo "PKG_VER_2DIGIT=${PKG_VER_2DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
echo "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――"
|
||||
@@ -352,9 +361,9 @@ jobs:
|
||||
id: task_release_tags_create
|
||||
if: ( github.event_name != 'workflow_dispatch' && inputs.DRY_RUN == false )
|
||||
with:
|
||||
tag: "${{ env.IMAGE_VERSION }}"
|
||||
tag: "${{ env.PACKAGE_VERSION }}"
|
||||
tag_exists_error: false
|
||||
message: '${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}'
|
||||
message: '${{ env.IMAGE_NAME }}-${{ env.PACKAGE_VERSION }}'
|
||||
gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }}
|
||||
gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }}
|
||||
|
||||
@@ -368,12 +377,14 @@ jobs:
|
||||
# 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
|
||||
needs: [ job-docker-release-tags-create ]
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ needs.job-docker-release-tags-create.outputs.package_version }}
|
||||
steps:
|
||||
|
||||
# #
|
||||
@@ -430,10 +441,10 @@ jobs:
|
||||
SHA1_GH="$(echo ${GITHUB_SHA})" # 71fad013cfce9116ec62779e4a7e627fe4c33627
|
||||
echo "SHA1_GH=${SHA1_GH}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
echo "PKG_VER_1DIGIT=${PKG_VER_1DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
echo "PKG_VER_2DIGIT=${PKG_VER_2DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
echo "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――"
|
||||
@@ -616,7 +627,7 @@ jobs:
|
||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=,event=tag
|
||||
|
||||
# tag add 1.0.0 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=450,prefix=,suffix=,value=${{ env.IMAGE_VERSION }}
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=450,prefix=,suffix=,value=${{ env.PACKAGE_VERSION }}
|
||||
|
||||
# tag add 1.0 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=425,prefix=,suffix=,value=${{ env.PKG_VER_2DIGIT }}
|
||||
@@ -634,28 +645,28 @@ jobs:
|
||||
labels: |
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
@@ -684,14 +695,14 @@ jobs:
|
||||
build-args: |-
|
||||
ARCH=amd64
|
||||
RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}
|
||||
VERSION=${{ env.IMAGE_VERSION }}
|
||||
VERSION=${{ env.PACKAGE_VERSION }}
|
||||
BUILDDATE=${{ env.NOW_DOCKER }}
|
||||
GIT_SHA1=${{ env.SHA1 }}
|
||||
ALPINE_VERSION=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.architecture=amd64
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
@@ -699,7 +710,7 @@ jobs:
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-architecture=amd64
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
@@ -757,14 +768,14 @@ jobs:
|
||||
build-args: |-
|
||||
ARCH=arm64
|
||||
RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}
|
||||
VERSION=${{ env.IMAGE_VERSION }}
|
||||
VERSION=${{ env.PACKAGE_VERSION }}
|
||||
BUILDDATE=${{ env.NOW_DOCKER }}
|
||||
GIT_SHA1=${{ env.SHA1 }}
|
||||
ALPINE_VERSION=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.architecture=arm64
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
@@ -772,7 +783,7 @@ jobs:
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-architecture=arm64
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
@@ -824,7 +835,6 @@ jobs:
|
||||
echo ""
|
||||
echo "---- [ INPUTS ] ----------------------------------------------------------------------------------------"
|
||||
echo "inputs.IMAGE_NAME ........................ ${{ inputs.IMAGE_NAME }}"
|
||||
echo "inputs.IMAGE_VERSION ..................... ${{ inputs.IMAGE_VERSION }}"
|
||||
echo "inputs.IMAGE_DOCKERHUB_AUTHOR ............ ${{ inputs.IMAGE_DOCKERHUB_AUTHOR }}"
|
||||
echo "inputs.IMAGE_DOCKERHUB_USERNAME .......... ${{ inputs.IMAGE_DOCKERHUB_USERNAME }}"
|
||||
echo "inputs.DEV_RELEASE ....................... ${{ inputs.DEV_RELEASE }}"
|
||||
@@ -832,7 +842,7 @@ jobs:
|
||||
echo ""
|
||||
echo "---- [ ENV ] -------------------------------------------------------------------------------------------"
|
||||
echo "env.IMAGE_NAME ........................... ${{ env.IMAGE_NAME }}"
|
||||
echo "env.IMAGE_VERSION ........................ ${{ env.IMAGE_VERSION }}"
|
||||
echo "env.PACKAGE_VERSION ...................... ${{ env.PACKAGE_VERSION }}"
|
||||
echo "env.PKG_VER_1DIGIT ....................... ${{ env.PKG_VER_1DIGIT }}"
|
||||
echo "env.PKG_VER_2DIGIT ....................... ${{ env.PKG_VER_2DIGIT }}"
|
||||
echo "env.IMAGE_DOCKERHUB_AUTHOR ............... ${{ env.IMAGE_DOCKERHUB_AUTHOR }}"
|
||||
@@ -906,20 +916,20 @@ jobs:
|
||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||
embed-thumbnail-url: ${{ env.DISCORD_BOT_EMBED_THUMBNAIL }}
|
||||
embed-description: |
|
||||
### 📦 Deploy (Dockerhub) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
||||
### 📦 Deploy (Dockerhub) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.PACKAGE_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://hub.docker.com/r/${{ env.IMAGE_DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}
|
||||
|
||||
- Version: `${{ env.IMAGE_VERSION }}`
|
||||
- Version: `${{ env.PACKAGE_VERSION }}`
|
||||
- Release Type: `${{ inputs.DEV_RELEASE == true && '⚠️⚠️ Development / Pre-release ⚠️⚠️' || 'Stable' }}`
|
||||
- Pull: `docker pull ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}:${{ inputs.DEV_RELEASE == true && 'development' || env.IMAGE_VERSION }}`
|
||||
- Pull: `docker pull ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}:${{ inputs.DEV_RELEASE == true && 'development' || env.PACKAGE_VERSION }}`
|
||||
- Pull (amd64): `docker pull ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_dh_push_amd64.outputs.digest }}`
|
||||
- Pull (arm64): `docker pull ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_dh_push_arm64.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' || '' }}`
|
||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.PACKAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
||||
- Branch: `${{ github.ref_name }}`
|
||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
||||
- Runner: `${{ runner.name }}`
|
||||
|
||||
108
.github/workflows/deploy-docker-gitea.yml
vendored
108
.github/workflows/deploy-docker-gitea.yml
vendored
@@ -62,18 +62,6 @@ on:
|
||||
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
|
||||
|
||||
# #
|
||||
# Registry Name
|
||||
#
|
||||
@@ -174,8 +162,7 @@ on:
|
||||
|
||||
env:
|
||||
IMAGE_NAME: ${{ github.event.inputs.IMAGE_NAME || 'tvapp2' }}
|
||||
IMAGE_VERSION: ${{ github.event.inputs.IMAGE_VERSION || '1.0.0' }}
|
||||
IMAGE_REGISTRY: ${{ github.event.inputs.IMAGE_VERSION || 'gitea' }}
|
||||
IMAGE_REGISTRY: ${{ github.event.inputs.IMAGE_REGISTRY || 'gitea' }}
|
||||
IMAGE_GITEA_AUTHOR: ${{ github.event.inputs.IMAGE_GITEA_AUTHOR || 'BinaryNinja' }}
|
||||
IMAGE_GITEA_USERNAME: ${{ github.event.inputs.IMAGE_GITEA_USERNAME || 'BinaryNinja' }}
|
||||
IMAGE_GITEA_WEBSITE: ${{ github.event.inputs.IMAGE_GITEA_WEBSITE || 'git.binaryninja.net' }}
|
||||
@@ -210,6 +197,8 @@ jobs:
|
||||
# runs-on: ubuntu-latest
|
||||
runs-on: apollo-x64
|
||||
timeout-minutes: 4
|
||||
outputs:
|
||||
package_version: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }}
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
@@ -235,6 +224,26 @@ jobs:
|
||||
uses: qoomon/actions--context@v4
|
||||
id: 'context'
|
||||
|
||||
# #
|
||||
# Release › Tags › Set › Package.json › Version
|
||||
# #
|
||||
|
||||
- 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
|
||||
echo "PACKAGE_VERSION=${VER}" >> $GITHUB_ENV
|
||||
|
||||
# #
|
||||
# Initialize › Get › Package.json › Version
|
||||
# #
|
||||
|
||||
- name: '👁️🗨️ Package Version › Get'
|
||||
run: |
|
||||
echo "VERSION: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }}"
|
||||
|
||||
# #
|
||||
# Release › Tags › Start
|
||||
# #
|
||||
@@ -271,10 +280,10 @@ jobs:
|
||||
SHA1_GH="$(echo ${GITHUB_SHA})" # 71fad013cfce9116ec62779e4a7e627fe4c33627
|
||||
echo "SHA1_GH=${SHA1_GH}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
echo "PKG_VER_1DIGIT=${PKG_VER_1DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
echo "PKG_VER_2DIGIT=${PKG_VER_2DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
echo "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――"
|
||||
@@ -364,9 +373,9 @@ jobs:
|
||||
id: task_release_tags_create
|
||||
if: ( github.event_name != 'workflow_dispatch' && inputs.DRY_RUN == false )
|
||||
with:
|
||||
tag: "${{ env.IMAGE_VERSION }}"
|
||||
tag: "${{ env.PACKAGE_VERSION }}"
|
||||
tag_exists_error: false
|
||||
message: '${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}'
|
||||
message: '${{ env.IMAGE_NAME }}-${{ env.PACKAGE_VERSION }}'
|
||||
gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }}
|
||||
gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }}
|
||||
|
||||
@@ -380,12 +389,14 @@ jobs:
|
||||
# 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
|
||||
needs: [ job-docker-release-tags-create ]
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ needs.job-docker-release-tags-create.outputs.package_version }}
|
||||
steps:
|
||||
|
||||
# #
|
||||
@@ -442,10 +453,10 @@ jobs:
|
||||
SHA1_GH="$(echo ${GITHUB_SHA})" # 71fad013cfce9116ec62779e4a7e627fe4c33627
|
||||
echo "SHA1_GH=${SHA1_GH}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
echo "PKG_VER_1DIGIT=${PKG_VER_1DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
echo "PKG_VER_2DIGIT=${PKG_VER_2DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
echo "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――"
|
||||
@@ -629,10 +640,10 @@ jobs:
|
||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=-amd64,event=tag
|
||||
|
||||
# tag add 1.0.0-amd64 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=500,prefix=,suffix=-amd64,value=${{ env.IMAGE_VERSION }}
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=500,prefix=,suffix=-amd64,value=${{ env.PACKAGE_VERSION }}
|
||||
|
||||
# tag add 1.0.0 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=450,prefix=,suffix=,value=${{ env.IMAGE_VERSION }}
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=450,prefix=,suffix=,value=${{ env.PACKAGE_VERSION }}
|
||||
|
||||
# tag add 1.0 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=425,prefix=,suffix=,value=${{ env.PKG_VER_2DIGIT }}
|
||||
@@ -650,28 +661,28 @@ jobs:
|
||||
labels: |
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
@@ -697,7 +708,7 @@ jobs:
|
||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=-arm64,event=tag
|
||||
|
||||
# tag add 1.0.0-arm64 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=500,prefix=,suffix=-arm64,value=${{ env.IMAGE_VERSION }}
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=500,prefix=,suffix=-arm64,value=${{ env.PACKAGE_VERSION }}
|
||||
|
||||
# dispatch add development-arm64 ( dispatch only + only dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == true }},priority=300,prefix=,suffix=-arm64,value=development
|
||||
@@ -706,28 +717,28 @@ jobs:
|
||||
labels: |
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
@@ -756,7 +767,7 @@ jobs:
|
||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=,event=tag
|
||||
|
||||
# tag add 1.0.0 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=450,prefix=,suffix=,value=${{ env.IMAGE_VERSION }}
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=450,prefix=,suffix=,value=${{ env.PACKAGE_VERSION }}
|
||||
|
||||
# tag add 1.0 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=425,prefix=,suffix=,value=${{ env.PKG_VER_2DIGIT }}
|
||||
@@ -774,28 +785,28 @@ jobs:
|
||||
labels: |
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
@@ -824,14 +835,14 @@ jobs:
|
||||
build-args: |-
|
||||
ARCH=amd64
|
||||
RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}
|
||||
VERSION=${{ env.IMAGE_VERSION }}
|
||||
VERSION=${{ env.PACKAGE_VERSION }}
|
||||
BUILDDATE=${{ env.NOW_DOCKER }}
|
||||
GIT_SHA1=${{ env.SHA1 }}
|
||||
ALPINE_VERSION=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.architecture=amd64
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
@@ -839,7 +850,7 @@ jobs:
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-architecture=amd64
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
@@ -897,14 +908,14 @@ jobs:
|
||||
build-args: |-
|
||||
ARCH=arm64
|
||||
RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}
|
||||
VERSION=${{ env.IMAGE_VERSION }}
|
||||
VERSION=${{ env.PACKAGE_VERSION }}
|
||||
BUILDDATE=${{ env.NOW_DOCKER }}
|
||||
GIT_SHA1=${{ env.SHA1 }}
|
||||
ALPINE_VERSION=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.architecture=arm64
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
@@ -912,7 +923,7 @@ jobs:
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-architecture=arm64
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
@@ -964,7 +975,6 @@ jobs:
|
||||
echo ""
|
||||
echo "---- [ INPUTS ] ----------------------------------------------------------------------------------------"
|
||||
echo "inputs.IMAGE_NAME ........................ ${{ inputs.IMAGE_NAME }}"
|
||||
echo "inputs.IMAGE_VERSION ..................... ${{ inputs.IMAGE_VERSION }}"
|
||||
echo "inputs.IMAGE_GITEA_USERNAME .............. ${{ inputs.IMAGE_GITEA_AUTHOR }}"
|
||||
echo "inputs.IMAGE_GITEA_USERNAME .............. ${{ inputs.IMAGE_GITEA_USERNAME }}"
|
||||
echo "inputs.IMAGE_GITEA_WEBSITE ............... ${{ inputs.IMAGE_GITEA_WEBSITE }}"
|
||||
@@ -973,7 +983,7 @@ jobs:
|
||||
echo ""
|
||||
echo "---- [ ENV ] -------------------------------------------------------------------------------------------"
|
||||
echo "env.IMAGE_NAME ........................... ${{ env.IMAGE_NAME }}"
|
||||
echo "env.IMAGE_VERSION ........................ ${{ env.IMAGE_VERSION }}"
|
||||
echo "env.PACKAGE_VERSION ...................... ${{ env.PACKAGE_VERSION }}"
|
||||
echo "env.PKG_VER_1DIGIT ....................... ${{ env.PKG_VER_1DIGIT }}"
|
||||
echo "env.PKG_VER_2DIGIT ....................... ${{ env.PKG_VER_2DIGIT }}"
|
||||
echo "env.IMAGE_GITEA_AUTHOR ................... ${{ env.IMAGE_GITEA_AUTHOR }}"
|
||||
@@ -1052,20 +1062,20 @@ jobs:
|
||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||
embed-thumbnail-url: ${{ env.DISCORD_BOT_EMBED_THUMBNAIL }}
|
||||
embed-description: |
|
||||
### 📦 Deploy (Gitea) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
||||
### 📦 Deploy (Gitea) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.PACKAGE_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://${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.IMAGE_GITEA_USERNAME }}/${{ env.IMAGE_NAME }}/packages
|
||||
|
||||
- Version: `${{ env.IMAGE_VERSION }}`
|
||||
- Version: `${{ env.PACKAGE_VERSION }}`
|
||||
- Release Type: `${{ inputs.DEV_RELEASE == true && '⚠️⚠️ Development / Pre-release ⚠️⚠️' || 'Stable' }}`
|
||||
- Pull: `docker pull ${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}:${{ inputs.DEV_RELEASE == true && 'development' || env.IMAGE_VERSION }}`
|
||||
- Pull: `docker pull ${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}:${{ inputs.DEV_RELEASE == true && 'development' || env.PACKAGE_VERSION }}`
|
||||
- Pull (amd64): `docker pull ${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_gi_push_amd64.outputs.digest }}`
|
||||
- Pull (arm64): `docker pull ${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_gi_push_arm64.outputs.digest }}`
|
||||
- Dry Run: `${{ inputs.DRY_RUN }}`
|
||||
- Source: `Gitea` https://${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.IMAGE_GITEA_USERNAME }}/${{ env.IMAGE_NAME }}/packages
|
||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.PACKAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
||||
- Branch: `${{ github.ref_name }}`
|
||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
||||
- Runner: `${{ runner.name }}`
|
||||
|
||||
100
.github/workflows/deploy-docker-github.yml
vendored
100
.github/workflows/deploy-docker-github.yml
vendored
@@ -62,18 +62,6 @@ on:
|
||||
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
|
||||
|
||||
# #
|
||||
# Registry Name
|
||||
#
|
||||
@@ -162,8 +150,7 @@ on:
|
||||
|
||||
env:
|
||||
IMAGE_NAME: ${{ github.event.inputs.IMAGE_NAME || 'tvapp2' }}
|
||||
IMAGE_VERSION: ${{ github.event.inputs.IMAGE_VERSION || '1.0.0' }}
|
||||
IMAGE_REGISTRY: ${{ github.event.inputs.IMAGE_VERSION || 'github' }}
|
||||
IMAGE_REGISTRY: ${{ github.event.inputs.IMAGE_REGISTRY || 'github' }}
|
||||
IMAGE_GHCR_AUTHOR: ${{ github.event.inputs.IMAGE_GHCR_AUTHOR || 'BinaryNinja' }}
|
||||
IMAGE_GHCR_USERNAME: ${{ github.event.inputs.IMAGE_GHCR_USERNAME || 'BinaryNinja' }}
|
||||
IMAGE_ALPINE_VERSION: ${{ github.event.inputs.IMAGE_ALPINE_VERSION || '3.22' }}
|
||||
@@ -197,6 +184,8 @@ jobs:
|
||||
# runs-on: ubuntu-latest
|
||||
runs-on: apollo-x64
|
||||
timeout-minutes: 4
|
||||
outputs:
|
||||
package_version: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }}
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
@@ -222,6 +211,26 @@ jobs:
|
||||
uses: qoomon/actions--context@v4
|
||||
id: 'context'
|
||||
|
||||
# #
|
||||
# Release › Tags › Set › Package.json › Version
|
||||
# #
|
||||
|
||||
- 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
|
||||
echo "PACKAGE_VERSION=${VER}" >> $GITHUB_ENV
|
||||
|
||||
# #
|
||||
# Initialize › Get › Package.json › Version
|
||||
# #
|
||||
|
||||
- name: '👁️🗨️ Package Version › Get'
|
||||
run: |
|
||||
echo "VERSION: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }}"
|
||||
|
||||
# #
|
||||
# Release › Tags › Start
|
||||
# #
|
||||
@@ -258,10 +267,10 @@ jobs:
|
||||
SHA1_GH="$(echo ${GITHUB_SHA})" # 71fad013cfce9116ec62779e4a7e627fe4c33627
|
||||
echo "SHA1_GH=${SHA1_GH}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
echo "PKG_VER_1DIGIT=${PKG_VER_1DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
echo "PKG_VER_2DIGIT=${PKG_VER_2DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
echo "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――"
|
||||
@@ -323,7 +332,7 @@ jobs:
|
||||
echo ""
|
||||
|
||||
# #
|
||||
# Tags › Tags › Fix Permissions
|
||||
# Release › Tags › Fix Permissions
|
||||
# #
|
||||
|
||||
- name: '#️⃣ Manage Permissions'
|
||||
@@ -349,9 +358,9 @@ jobs:
|
||||
- uses: rickstaa/action-create-tag@v1
|
||||
if: ( github.event_name != 'workflow_dispatch' && inputs.DRY_RUN == false )
|
||||
with:
|
||||
tag: "${{ env.IMAGE_VERSION }}"
|
||||
tag: "${{ env.PACKAGE_VERSION }}"
|
||||
tag_exists_error: false
|
||||
message: '${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}'
|
||||
message: '${{ env.IMAGE_NAME }}-${{ env.PACKAGE_VERSION }}'
|
||||
gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }}
|
||||
gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }}
|
||||
|
||||
@@ -365,12 +374,14 @@ jobs:
|
||||
# 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
|
||||
needs: [ job-docker-release-tags-create ]
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ needs.job-docker-release-tags-create.outputs.package_version }}
|
||||
steps:
|
||||
|
||||
# #
|
||||
@@ -427,10 +438,10 @@ jobs:
|
||||
SHA1_GH="$(echo ${GITHUB_SHA})" # 71fad013cfce9116ec62779e4a7e627fe4c33627
|
||||
echo "SHA1_GH=${SHA1_GH}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
PKG_VER_1DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -d '.' -f1-1)" # 3.22 > 3
|
||||
echo "PKG_VER_1DIGIT=${PKG_VER_1DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.IMAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
PKG_VER_2DIGIT="$(echo ${{ env.PACKAGE_VERSION }} | cut -f2 -d ":" | cut -c1-3)" # 3.22 > 3.2
|
||||
echo "PKG_VER_2DIGIT=${PKG_VER_2DIGIT}" >> $GITHUB_ENV
|
||||
|
||||
echo "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――"
|
||||
@@ -611,7 +622,7 @@ jobs:
|
||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=,event=tag
|
||||
|
||||
# tag add 1.0.0 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=450,prefix=,suffix=,value=${{ env.IMAGE_VERSION }}
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=450,prefix=,suffix=,value=${{ env.PACKAGE_VERSION }}
|
||||
|
||||
# tag add 1.0 ( dispatch only + no dev )
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=425,prefix=,suffix=,value=${{ env.PKG_VER_2DIGIT }}
|
||||
@@ -629,28 +640,28 @@ jobs:
|
||||
labels: |
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
org.opencontainers.image.vendor=${{ env.REGISTRY_REPO_AUTHOR_LC }}
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
org.tvapp2.image.build-sha1=${{ env.SHA1 }}
|
||||
@@ -679,14 +690,14 @@ jobs:
|
||||
build-args: |-
|
||||
ARCH=amd64
|
||||
RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}
|
||||
VERSION=${{ env.IMAGE_VERSION }}
|
||||
VERSION=${{ env.PACKAGE_VERSION }}
|
||||
BUILDDATE=${{ env.NOW_DOCKER }}
|
||||
GIT_SHA1=${{ env.SHA1 }}
|
||||
ALPINE_VERSION=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.architecture=amd64
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
@@ -694,7 +705,7 @@ jobs:
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-architecture=amd64
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
@@ -750,14 +761,14 @@ jobs:
|
||||
build-args: |-
|
||||
ARCH=arm64
|
||||
RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}
|
||||
VERSION=${{ env.IMAGE_VERSION }}
|
||||
VERSION=${{ env.PACKAGE_VERSION }}
|
||||
BUILDDATE=${{ env.NOW_DOCKER }}
|
||||
GIT_SHA1=${{ env.SHA1 }}
|
||||
ALPINE_VERSION=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
annotations: |-
|
||||
org.opencontainers.image.description=TVApp2
|
||||
org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }}
|
||||
org.opencontainers.image.version=${{ env.IMAGE_VERSION }}
|
||||
org.opencontainers.image.version=${{ env.PACKAGE_VERSION }}
|
||||
org.opencontainers.image.licenses=MIT
|
||||
org.opencontainers.image.architecture=arm64
|
||||
org.opencontainers.image.revision=${{ env.SHA1 }}
|
||||
@@ -765,7 +776,7 @@ jobs:
|
||||
org.opencontainers.image.ref.name=${{ github.ref_name }}
|
||||
org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }}
|
||||
org.opencontainers.image.registry=${{ env.IMAGE_REGISTRY }}
|
||||
org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version="Version: ${{ env.PACKAGE_VERSION }} Date: ${{ env.NOW_DOCKER }}"
|
||||
org.tvapp2.image.build-version-alpine=${{ env.IMAGE_ALPINE_VERSION }}
|
||||
org.tvapp2.image.build-architecture=arm64
|
||||
org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}"
|
||||
@@ -815,7 +826,6 @@ jobs:
|
||||
echo ""
|
||||
echo "---- [ INPUTS ] ----------------------------------------------------------------------------------------"
|
||||
echo "inputs.IMAGE_NAME ........................ ${{ inputs.IMAGE_NAME }}"
|
||||
echo "inputs.IMAGE_VERSION ..................... ${{ inputs.IMAGE_VERSION }}"
|
||||
echo "inputs.IMAGE_GHCR_AUTHOR ................. ${{ inputs.IMAGE_GHCR_AUTHOR }}"
|
||||
echo "inputs.IMAGE_GHCR_USERNAME ............... ${{ inputs.IMAGE_GHCR_USERNAME }}"
|
||||
echo "inputs.DEV_RELEASE ....................... ${{ inputs.DEV_RELEASE }}"
|
||||
@@ -823,7 +833,7 @@ jobs:
|
||||
echo ""
|
||||
echo "---- [ ENV ] -------------------------------------------------------------------------------------------"
|
||||
echo "env.IMAGE_NAME ........................... ${{ env.IMAGE_NAME }}"
|
||||
echo "env.IMAGE_VERSION ........................ ${{ env.IMAGE_VERSION }}"
|
||||
echo "env.PACKAGE_VERSION ...................... ${{ env.PACKAGE_VERSION }}"
|
||||
echo "env.PKG_VER_1DIGIT ....................... ${{ env.PKG_VER_1DIGIT }}"
|
||||
echo "env.PKG_VER_2DIGIT ....................... ${{ env.PKG_VER_2DIGIT }}"
|
||||
echo "env.IMAGE_GHCR_AUTHOR .................... ${{ env.IMAGE_GHCR_AUTHOR }}"
|
||||
@@ -897,20 +907,20 @@ jobs:
|
||||
embed-url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||
embed-thumbnail-url: ${{ env.DISCORD_BOT_EMBED_THUMBNAIL }}
|
||||
embed-description: |
|
||||
### 📦 Deploy (Github) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
||||
### 📦 Deploy (Github) ${{ job.status == 'success' && '✅' || '❌' }} › `${{ env.IMAGE_NAME }}-${{ env.PACKAGE_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 }}
|
||||
|
||||
- Version: `${{ env.IMAGE_VERSION }}`
|
||||
- Version: `${{ env.PACKAGE_VERSION }}`
|
||||
- Release Type: `${{ inputs.DEV_RELEASE == true && '⚠️⚠️ Development / Pre-release ⚠️⚠️' || 'Stable' }}`
|
||||
- Pull: `docker pull ghcr.io/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}:${{ inputs.DEV_RELEASE == true && 'development' || env.IMAGE_VERSION }}`
|
||||
- Pull: `docker pull ghcr.io/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}:${{ inputs.DEV_RELEASE == true && 'development' || env.PACKAGE_VERSION }}`
|
||||
- Pull (amd64): `docker pull ghcr.io/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_gh_push_amd64.outputs.digest }}`
|
||||
- Pull (arm64): `docker pull ghcr.io/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_gh_push_arm64.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' || '' }}`
|
||||
- Docker Image: `${{ env.IMAGE_NAME }}-${{ env.PACKAGE_VERSION }}${{ inputs.DEV_RELEASE == true && '-development' || '' }}`
|
||||
- Branch: `${{ github.ref_name }}`
|
||||
- Workflow: `${{ github.workflow }} (#${{github.run_number}})`
|
||||
- Runner: `${{ runner.name }}`
|
||||
@@ -947,12 +957,14 @@ jobs:
|
||||
# runs-on: ubuntu-latest
|
||||
runs-on: apollo-x64
|
||||
timeout-minutes: 5
|
||||
needs: [ job-docker-release-tags-create, job-docker-release-github ]
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
attestations: write
|
||||
id-token: write
|
||||
needs: [ job-docker-release-tags-create, job-docker-release-github ]
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ needs.job-docker-release-tags-create.outputs.package_version }}
|
||||
steps:
|
||||
|
||||
# #
|
||||
@@ -964,6 +976,14 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# #
|
||||
# Release › Cleanup › Print Version Debug
|
||||
# #
|
||||
|
||||
- name: '🪪 Get Package Version'
|
||||
run: |
|
||||
echo "VERSION: ${{ env.PACKAGE_VERSION }}"
|
||||
|
||||
# #
|
||||
# Release › Cleanup › Clean Untagged Images
|
||||
# #
|
||||
|
||||
45
.github/workflows/history-clean.yml
vendored
45
.github/workflows/history-clean.yml
vendored
@@ -67,37 +67,25 @@ on:
|
||||
type: string
|
||||
|
||||
# #
|
||||
# Main Branch
|
||||
# Branch
|
||||
#
|
||||
# main branch re-recreate
|
||||
# select branch to clean
|
||||
# you must also run the workflow from that branch
|
||||
# #
|
||||
|
||||
BRANCH_MAIN:
|
||||
description: '🌳 Main Branch'
|
||||
BRANCH:
|
||||
description: '🌳 Branch'
|
||||
required: true
|
||||
default: 'main'
|
||||
type: string
|
||||
|
||||
# #
|
||||
# Deployment Environment Name
|
||||
#
|
||||
# this is the name of the deployment item
|
||||
# #
|
||||
|
||||
DEPLOYMENT_ENV:
|
||||
description: '📦 Deployment Environment'
|
||||
required: true
|
||||
default: 'orion'
|
||||
type: string
|
||||
|
||||
# #
|
||||
# environment variables
|
||||
# #
|
||||
|
||||
env:
|
||||
COMMIT_LABEL: ${{ github.event.inputs.COMMIT_LABEL || 'cleanup' }}
|
||||
BRANCH_MAIN: ${{ github.event.inputs.BRANCH_MAIN || 'main' }}
|
||||
DEPLOYMENT_ENV: ${{ github.event.inputs.DEPLOYMENT_ENV || 'orion' }}
|
||||
BRANCH: ${{ github.event.inputs.BRANCH || 'main' }}
|
||||
BOT_NAME_1: EuropaServ
|
||||
BOT_NAME_2: BinaryServ
|
||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
||||
@@ -111,9 +99,11 @@ jobs:
|
||||
history-clean:
|
||||
name: >-
|
||||
🧹 History › Clean
|
||||
# runs-on: ubuntu-latest
|
||||
runs-on: apollo-x64
|
||||
timeout-minutes: 5
|
||||
runs-on: ubuntu-latest
|
||||
# runs-on: apollo-x64
|
||||
timeout-minutes: 15
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
|
||||
# #
|
||||
@@ -254,7 +244,7 @@ jobs:
|
||||
now=$(date -u '+%m/%d/%Y %H:%M')
|
||||
commit_label="${{ env.COMMIT_LABEL }}" >> $GITHUB_ENV
|
||||
echo -e "$commit_label"
|
||||
commit_message="\\\`️️🧹 $commit_label 🧹\\\` \\\`$now UTC\\\`" >> $GITHUB_ENV
|
||||
commit_message="chore(maint): \\\`️️🧹 $commit_label 🧹\\\` \\\`$now UTC\\\`" >> $GITHUB_ENV
|
||||
echo -e "$commit_message"
|
||||
echo "COMMIT_MESSAGE=$(echo $commit_message)" >> $GITHUB_ENV
|
||||
echo "NOW=$(echo $now)" >> $GITHUB_ENV
|
||||
@@ -290,24 +280,25 @@ jobs:
|
||||
git commit -m "${{ env.COMMIT_MESSAGE }}"
|
||||
|
||||
# Delete the old main branch
|
||||
git branch -D ${{ env.BRANCH_MAIN }}
|
||||
git branch -D ${{ env.BRANCH }}
|
||||
|
||||
# Rename the new orphan branch to main
|
||||
git branch -m ${{ env.BRANCH_MAIN }}
|
||||
git branch -m ${{ env.BRANCH }}
|
||||
|
||||
# Force push the new main branch to the remote repository
|
||||
git push -f origin ${{ env.BRANCH_MAIN }}
|
||||
git push -f origin ${{ env.BRANCH }}
|
||||
|
||||
# #
|
||||
# History › Clean › References
|
||||
# #
|
||||
|
||||
- name: >-
|
||||
🗑️ Clean References
|
||||
🗑️ Garbage Collection (Aggressive)
|
||||
run: |
|
||||
# Remove remote-tracking references to deleted branches (optional)
|
||||
git fetch origin --prune
|
||||
|
||||
git repack
|
||||
git prune-packed
|
||||
git reflog expire --expire=now --all
|
||||
git gc --prune=now --aggressive
|
||||
|
||||
|
||||
41
.github/workflows/release.yml
vendored
41
.github/workflows/release.yml
vendored
@@ -53,8 +53,8 @@ on:
|
||||
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
|
||||
# true the changelog generated in releases tab will only display single commits.
|
||||
# false the changelog shows pull requests completed based on their labels
|
||||
# #
|
||||
|
||||
CHANGELOG_MODE_COMMIT:
|
||||
@@ -64,10 +64,10 @@ on:
|
||||
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
|
||||
# true Will show all types of commits, including uncategorized
|
||||
# false WIll only show actions that have been categorized using the format
|
||||
# type(scope): description
|
||||
# type: description
|
||||
# #
|
||||
|
||||
SHOW_UNCATEGORIZED:
|
||||
@@ -256,7 +256,6 @@ jobs:
|
||||
# #
|
||||
|
||||
- name: '🪪 Test Next Job Version'
|
||||
id: task_release_debug_print_ver
|
||||
run: |
|
||||
echo "VERSION: ${{ env.PACKAGE_VERSION }}"
|
||||
|
||||
@@ -265,7 +264,6 @@ jobs:
|
||||
# #
|
||||
|
||||
- name: '🪪 NPM › Install & Lint'
|
||||
id: task_release_npm_install
|
||||
working-directory: ./tvapp2
|
||||
run: |
|
||||
npm ci
|
||||
@@ -278,7 +276,6 @@ jobs:
|
||||
# #
|
||||
|
||||
- name: '🪪 Generate IDs'
|
||||
id: task_release_npm_env_generate
|
||||
working-directory: ./tvapp2
|
||||
run: |
|
||||
npm run root:generate
|
||||
@@ -300,7 +297,6 @@ jobs:
|
||||
# #
|
||||
|
||||
- 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 }}"
|
||||
@@ -310,7 +306,6 @@ jobs:
|
||||
# #
|
||||
|
||||
- name: '🔨 Build › Stable › ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip'
|
||||
id: task_release_build_st
|
||||
if: |
|
||||
startsWith( inputs.RC_RELEASE, false ) ||
|
||||
startsWith( env.RC_RELEASE, false )
|
||||
@@ -320,6 +315,7 @@ jobs:
|
||||
|
||||
echo Building STABLE Package ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-docker-compose.zip
|
||||
zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-docker-compose.zip docker-compose.yml README.md LICENSE
|
||||
ls
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }}
|
||||
|
||||
@@ -366,7 +362,6 @@ jobs:
|
||||
# #
|
||||
|
||||
- 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 }}"
|
||||
@@ -378,7 +373,6 @@ jobs:
|
||||
# #
|
||||
|
||||
- name: '🪪 GPG › Import Signing Key › W/o Passphrase'
|
||||
id: task_release_gpg_import_nopass
|
||||
if: env.GPG_KEY_BASE64 != '' && env.GPG_KEY_PASSPHRASE == ''
|
||||
run: |
|
||||
echo $GPG_KEY_BASE64 | base64 -di | gpg --import
|
||||
@@ -390,7 +384,6 @@ jobs:
|
||||
# #
|
||||
|
||||
- name: '🪪 GPG › Import Signing Key › w/ Passphrase'
|
||||
id: task_release_gpg_import_withpass
|
||||
if: env.GPG_KEY_BASE64 != '' && env.GPG_KEY_PASSPHRASE != ''
|
||||
run: |
|
||||
echo "$GPG_KEY_BASE64" | base64 -di > /tmp/signing-key.gpg
|
||||
@@ -472,16 +465,15 @@ jobs:
|
||||
# #
|
||||
|
||||
- name: '🆔 Checksum › Print'
|
||||
id: task_release_checksum_st_get
|
||||
run: |
|
||||
echo "${{ env.SHA256SUM }}"
|
||||
echo SHA1SUM ............... ${{ env.SHA1SUM }}
|
||||
echo SHA256SUM ............. ${{ env.SHA256SUM }}
|
||||
|
||||
# #
|
||||
# Release › 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\])
|
||||
@@ -491,7 +483,7 @@ jobs:
|
||||
# #
|
||||
# Release › Changelog › Generate Tags
|
||||
#
|
||||
# generates a changelog from the github api. requires a PREVIOUS_TAG in order to figure
|
||||
# generates a changelog from the github api. requires a TAG_LAST in order to figure
|
||||
# out the changes made between the two versions.
|
||||
#
|
||||
# outputs:
|
||||
@@ -499,7 +491,6 @@ jobs:
|
||||
# #
|
||||
|
||||
- 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
|
||||
@@ -674,7 +665,7 @@ jobs:
|
||||
if: |
|
||||
startsWith( inputs.RC_RELEASE, false ) ||
|
||||
startsWith( env.RC_RELEASE, false )
|
||||
uses: softprops/action-gh-release@v2.2.2
|
||||
uses: softprops/action-gh-release@v2
|
||||
env:
|
||||
CHANGELOG_CATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }}
|
||||
CHANGELOG_UNCATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }}
|
||||
@@ -712,7 +703,7 @@ jobs:
|
||||
if: |
|
||||
startsWith( inputs.RC_RELEASE, true ) ||
|
||||
startsWith( env.RC_RELEASE, true )
|
||||
uses: softprops/action-gh-release@v2.2.2
|
||||
uses: softprops/action-gh-release@v2
|
||||
env:
|
||||
CHANGELOG_CATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }}
|
||||
CHANGELOG_UNCATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }}
|
||||
@@ -811,7 +802,7 @@ jobs:
|
||||
|
||||
job-complete:
|
||||
name: >-
|
||||
🆗 Successful Deployment
|
||||
🆗 Successful Deployment
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ job-initialize, job-release ]
|
||||
env:
|
||||
@@ -872,7 +863,7 @@ jobs:
|
||||
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
|
||||
echo "| 🏷️ **SHA256** | ${{ env.SHA_STABLE }} |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| 🏷️ **GUID** | ${{ env.GUID }} |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| 🏷️ **UUID** | ${{ env.UUID }} |" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
|
||||
99
README.md
99
README.md
@@ -86,10 +86,11 @@
|
||||
- [Labels](#labels-1)
|
||||
- [Dynamic.yml](#dynamicyml-1)
|
||||
- [Troubleshooting](#troubleshooting)
|
||||
- [Run Error: `Error serving playlist: ENOENT: no such file or directory, open /usr/src/app/xmltv.1.xml`](#run-error-error-serving-playlist-enoent-no-such-file-or-directory-open-usrsrcappxmltv1xml)
|
||||
- [Build Error: `s6-rc-compile: fatal: invalid /etc/s6-overlay/s6-rc.d/certsync/type: must be oneshot, longrun, or bundle`](#build-error-s6-rc-compile-fatal-invalid-etcs6-overlays6-rcdcertsynctype-must-be-oneshot-longrun-or-bundle)
|
||||
- [Build Error: `unable to exec /etc/s6-overlay/s6-rc.d/init-envfile/run: Permission denied`](#build-error-unable-to-exec-etcs6-overlays6-rcdinit-envfilerun-permission-denied)
|
||||
- [Build Error: `[ERR] [27] Jellyfin.LiveTv.Guide.GuideManager: Error getting programs for channel XXXXXXXXXXXXXXX (Source 2) System.Xml.XmlException: '', hexadecimal value 0x1F, is an invalid character. Line 1, position 1.`](#build-error-err-27-jellyfinlivetvguideguidemanager-error-getting-programs-for-channel-xxxxxxxxxxxxxxx-source-2-systemxmlxmlexception--hexadecimal-value-0x1f-is-an-invalid-character-line-1-position-1)
|
||||
- [Run Error: `Warning: Step size 60 higher than possible maximum of 59`](#run-error-warning-step-size-60-higher-than-possible-maximum-of-59)
|
||||
- [Run Error: `Error serving playlist: ENOENT: no such file or directory, open /usr/src/app/xmltv.1.xml`](#run-error-error-serving-playlist-enoent-no-such-file-or-directory-open-usrsrcappxmltv1xml)
|
||||
- [Build Error: `s6-rc-compile: fatal: invalid /etc/s6-overlay/s6-rc.d/certsync/type: must be oneshot, longrun, or bundle`](#build-error-s6-rc-compile-fatal-invalid-etcs6-overlays6-rcdcertsynctype-must-be-oneshot-longrun-or-bundle)
|
||||
- [Build Error: `unable to exec /etc/s6-overlay/s6-rc.d/init-envfile/run: Permission denied`](#build-error-unable-to-exec-etcs6-overlays6-rcdinit-envfilerun-permission-denied)
|
||||
- [Build Error: `[ERR] [27] Jellyfin.LiveTv.Guide.GuideManager: Error getting programs for channel XXXXXXXXXXXXXXX (Source 2) System.Xml.XmlException: '', hexadecimal value 0x1F, is an invalid character. Line 1, position 1.`](#build-error-err-27-jellyfinlivetvguideguidemanager-error-getting-programs-for-channel-xxxxxxxxxxxxxxx-source-2-systemxmlxmlexception--hexadecimal-value-0x1f-is-an-invalid-character-line-1-position-1)
|
||||
- [Extra Notes](#extra-notes)
|
||||
- [Accessing Container Shell](#accessing-container-shell)
|
||||
- [ash](#ash)
|
||||
@@ -411,13 +412,14 @@ If the listed tasks above are not performed, your docker container will throw th
|
||||
- `/etc/s6-overlay/s6-rc.d/init-adduser/run: line 34: aetherxown: command not found`
|
||||
- `/etc/s6-overlay/s6-rc.d/init-adduser/run: /usr/bin/aetherxown: cannot execute: required file not found`
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
#### LF over CRLF
|
||||
|
||||
You cannot utilize Windows' `Carriage Return Line Feed`. All files must be converted to Unix' `Line Feed`. This can be done with **[Visual Studio Code](https://code.visualstudio.com/)**. OR; you can run the Linux terminal command `🗔 dos2unix` to convert these files.
|
||||
|
||||
If you cloned the files from the official repository [🔆 gitea:binaryninja/tvapp2](https://git.binaryninja.net/binaryninja/tvapp2) and have not edited them, then you should not need to do this step.
|
||||
For the branches **[docker/alpine-base](https://github.com/Aetherinox/docker-base-alpine/tree/docker/alpine-base)** and your main app image, you can use the following recursive commands:
|
||||
|
||||
<br />
|
||||
|
||||
@@ -437,14 +439,57 @@ If you cloned the files from the official repository [🔆 gitea:binaryninja/tva
|
||||
find ./ -type f | grep -Ev 'docs|node_modules|.git|*.jpg|*.jpeg|*.png' | xargs dos2unix --
|
||||
|
||||
# Change run / binaries
|
||||
find ./ -type f -name 'run' | xargs dos2unix --
|
||||
find ./ -type f -name 'run' -print | xargs dos2unix --
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
For the branch **[docker/core](https://github.com/Aetherinox/docker-base-alpine/tree/docker/core)**, you can use the following commands:
|
||||
|
||||
```shell
|
||||
dos2unix docker-images.v3
|
||||
dos2unix aetherxown.v1
|
||||
dos2unix package-install.v1
|
||||
dos2unix with-contenv.v1
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
If you do not have dos2unix; you may use `sed:
|
||||
|
||||
```shell
|
||||
sed -i 's/\r$//' /etc/s6-overlay/s6-rc.d/ci-service-check/file
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
You may pre-check if a file is using Windows CRLF or Linux LF by running the command `file <filename>` on the file:
|
||||
|
||||
```shell
|
||||
$ file ./root//etc/s6-overlay/s6-rc.d/ci-service-check/type
|
||||
./root//etc/s6-overlay/s6-rc.d/ci-service-check/type: ASCII text
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
You will get one of three messages listed below:
|
||||
|
||||
1. ASCII text, with CRLF, LF line terminators
|
||||
2. ASCII text, with CRLF line terminators
|
||||
3. ASCII text
|
||||
|
||||
<br />
|
||||
|
||||
If you get messages `1` or `2`, then you need to run `dos2unix` on the file; otherwise when you bring the container up, you will get errors.
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
#### Set `+x / 0755` Permissions
|
||||
|
||||
The files contained within this repo **MUST** have `chmod 755` / `+x` executable permissions.
|
||||
The files contained within this repo **MUST** have `chmod 755` / `+x` executable permissions. If you are using our Github workflow sample **[deploy-docker-github.yml](https://github.com/Aetherinox/docker-base-alpine/blob/workflows/samples/deploy-docker-github.yml)**, this is done automatically. If you are building the images manually; you need to do this. Ensure those files have the correct permissions prior to building the Alpine base docker image.
|
||||
|
||||
If you are building the **[docker/alpine-base](https://github.com/Aetherinox/docker-base-alpine/tree/docker/alpine-base)** or your main application images, you must ensure the files in those branches have the proper permissions. All of the executable files are named `run`:
|
||||
|
||||
```shell
|
||||
find ./ -name 'run' -print -exec sudo chmod +x {} \;
|
||||
@@ -472,6 +517,17 @@ sudo chmod +x ./root/etc/s6-overlay/s6-rc.d/init-adduser/run \
|
||||
./root/etc/s6-overlay/s6-rc.d/init-nginx/run
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
For the branch **[docker/core](https://github.com/Aetherinox/docker-base-alpine/tree/docker/core)**, there are a few files to change. The ending version number may change, but the commands to change the permissions are as follows:
|
||||
|
||||
```shell
|
||||
sudo chmod +x docker-images.v3 \
|
||||
chmod +x aetherxown.v1 \
|
||||
chmod +x package-install.v1 \
|
||||
chmod +x with-contenv.v1
|
||||
```
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
@@ -1978,7 +2034,28 @@ If you have issues building your TVApp2 docker image, please refer to the follow
|
||||
<br />
|
||||
<br />
|
||||
|
||||
#### Run Error: `Error serving playlist: ENOENT: no such file or directory, open /usr/src/app/xmltv.1.xml`
|
||||
### Run Error: `Warning: Step size 60 higher than possible maximum of 59`
|
||||
|
||||
This error means that you have placed an incorrect value for a cron job. This error can show if you've set:
|
||||
|
||||
```shell
|
||||
environment:
|
||||
TASK_CRON_SYNC: "*/60 * * * *"
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
To correctly set the value, change your cron to:
|
||||
|
||||
```shell
|
||||
environment:
|
||||
TASK_CRON_SYNC: "0 */1 * * *"
|
||||
```
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
### Run Error: `Error serving playlist: ENOENT: no such file or directory, open /usr/src/app/xmltv.1.xml`
|
||||
|
||||
This error occurs at run-time when attempting to spin up your TVApp2 docker container. If you receive this error, restart your TVApp2 docker container. Ensure that your docker container also has access to your docker network so that it can connect to our repository and fetch the data files it needs to generate your playlist.
|
||||
|
||||
@@ -1989,7 +2066,7 @@ If the error continues after doing the above; delete the existing image, and re-
|
||||
<br />
|
||||
<br />
|
||||
|
||||
#### Build Error: `s6-rc-compile: fatal: invalid /etc/s6-overlay/s6-rc.d/certsync/type: must be oneshot, longrun, or bundle`
|
||||
### Build Error: `s6-rc-compile: fatal: invalid /etc/s6-overlay/s6-rc.d/certsync/type: must be oneshot, longrun, or bundle`
|
||||
|
||||
This error means that you are attempting to combine files which are utilizing CRLF over LF; which is **CR** = Carriage Return and **LF** = Line Feed
|
||||
|
||||
@@ -2029,7 +2106,7 @@ find ./ -type f | grep -Ev '.git|*.jpg|*.jpeg|*.png' | sudo xargs dos2unix --
|
||||
<br />
|
||||
<br />
|
||||
|
||||
#### Build Error: `unable to exec /etc/s6-overlay/s6-rc.d/init-envfile/run: Permission denied`
|
||||
### Build Error: `unable to exec /etc/s6-overlay/s6-rc.d/init-envfile/run: Permission denied`
|
||||
|
||||
There are multiple errors you can receive when attempting to run your TVApp2 docker image. You may receive any of the following errors:
|
||||
|
||||
@@ -2054,7 +2131,7 @@ After you have set these permissions, re-build your docker image using `docker b
|
||||
<br />
|
||||
<br />
|
||||
|
||||
#### Build Error: `[ERR] [27] Jellyfin.LiveTv.Guide.GuideManager: Error getting programs for channel XXXXXXXXXXXXXXX (Source 2) System.Xml.XmlException: '', hexadecimal value 0x1F, is an invalid character. Line 1, position 1.`
|
||||
### Build Error: `[ERR] [27] Jellyfin.LiveTv.Guide.GuideManager: Error getting programs for channel XXXXXXXXXXXXXXX (Source 2) System.Xml.XmlException: '', hexadecimal value 0x1F, is an invalid character. Line 1, position 1.`
|
||||
|
||||
This error may be seen if you are attempting to import our EPG guide data directly into Jellyfin. The cause of this is due to you having **GZIP Compression** enabled in your header request and response. See the example below; which is in your TVApp2 `📄 docker-compose.yml` file:
|
||||
|
||||
|
||||
@@ -45,6 +45,6 @@ services:
|
||||
soft: -1
|
||||
hard: -1
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "--fail", "http://127.0.0.1:4124" ]
|
||||
test: [ "CMD", "curl", "--fail", "http://127.0.0.1:4124/api/health?silent=true" ]
|
||||
interval: 30s
|
||||
retries: 5
|
||||
|
||||
@@ -188,6 +188,28 @@ getos( ( e, json ) =>
|
||||
return serverOs;
|
||||
});
|
||||
|
||||
/*
|
||||
helper > str2bool
|
||||
*/
|
||||
|
||||
function str2bool( str )
|
||||
{
|
||||
if ( typeof str === 'string' )
|
||||
{
|
||||
const lower = str.toLowerCase();
|
||||
if ([
|
||||
'1', 'true', 'yes', 'y', 't'
|
||||
].includes( lower ) )
|
||||
str = true;
|
||||
if ([
|
||||
'0', 'false', 'no', 'n', 'f'
|
||||
].includes( lower ) )
|
||||
str = false;
|
||||
return str;
|
||||
}
|
||||
else return Boolean( str );
|
||||
}
|
||||
|
||||
/*
|
||||
Define > Logs
|
||||
|
||||
@@ -1479,13 +1501,14 @@ async function serveHealthCheck( req, res )
|
||||
try
|
||||
{
|
||||
const paramUrl = new URL( req.url, `http://${ req.headers.host }` ).searchParams.get( 'api' );
|
||||
const paramQuery = new URL( req.url, `http://${ req.headers.host }` ).searchParams.get( 'query' );
|
||||
const paramSilent = new URL( req.url, `http://${ req.headers.host }` ).searchParams.get( 'silent' );
|
||||
|
||||
if ( !paramUrl )
|
||||
{
|
||||
if ( paramQuery !== 'uptime' )
|
||||
if ( str2bool( paramSilent ) !== true )
|
||||
{
|
||||
Log.debug( `/api`, chalk.yellow( `[health]` ), chalk.white( `⚙️` ),
|
||||
chalk.blueBright( `<msg>` ), chalk.gray( `No API key passed to health check` ) );
|
||||
chalk.blueBright( `<msg>` ), chalk.gray( `No api-key passed to health check` ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1509,7 +1532,7 @@ async function serveHealthCheck( req, res )
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
|
||||
if ( paramQuery !== 'uptime' )
|
||||
if ( str2bool( paramSilent ) !== true )
|
||||
{
|
||||
Log.ok( `/api`, chalk.yellow( `[health]` ), chalk.white( `✅` ),
|
||||
chalk.greenBright( `<msg>` ), chalk.gray( `Response` ),
|
||||
@@ -2062,8 +2085,8 @@ const server = http.createServer( ( req, resp ) =>
|
||||
loadFile channel?url=https%3A%2F%2Ftvpass.org%2Fchannel%2Fabc-wabc-new-york-ny%2F
|
||||
*/
|
||||
|
||||
const paramQuery = new URL( req.url, `http://${ req.headers.host }` ).searchParams.get( 'query' );
|
||||
if ( paramQuery !== 'uptime' )
|
||||
const paramSilent = new URL( req.url, `http://${ req.headers.host }` ).searchParams.get( 'silent' );
|
||||
if ( str2bool( paramSilent ) !== true )
|
||||
{
|
||||
Log.debug( `http`, chalk.yellow( `[requests]` ), chalk.white( `⚙️` ),
|
||||
chalk.blueBright( `<msg>` ), chalk.gray( `Request started` ),
|
||||
@@ -2251,11 +2274,27 @@ const server = http.createServer( ( req, resp ) =>
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
Endpoint > Health Check
|
||||
|
||||
paramQuery specifies what type of query is triggered
|
||||
options:
|
||||
uptime
|
||||
healthcheck
|
||||
sync
|
||||
|
||||
paramSilent specifies if logs should be silenced. useful for docker-compose.yml healthcheck so that console
|
||||
is not spammed every 30 seconds.
|
||||
*/
|
||||
|
||||
if ( subdomainHealth.some( ( urlKeyword ) => loadFile.startsWith( urlKeyword ) ) && method === 'GET' )
|
||||
{
|
||||
const paramQuery = new URL( req.url, `http://${ req.headers.host }` ).searchParams.get( 'query' );
|
||||
const paramSilent = new URL( req.url, `http://${ req.headers.host }` ).searchParams.get( 'silent' );
|
||||
|
||||
if ( paramQuery !== 'uptime' )
|
||||
// do not show log if query is `uptime`, since uptime runs every 1 second.
|
||||
// do not show logs if query has striggered `silent?=true` in url
|
||||
|
||||
if ( str2bool( paramSilent ) !== true )
|
||||
{
|
||||
Log.info( `http`, chalk.yellow( `[requests]` ), chalk.white( `ℹ️` ),
|
||||
chalk.blueBright( `<msg>` ), chalk.gray( `Requesting to access health api` ),
|
||||
|
||||
608
tvapp2/package-lock.json
generated
608
tvapp2/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "tvapp2",
|
||||
"version": "1.5.4",
|
||||
"version": "1.5.5",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "tvapp2",
|
||||
"version": "1.5.4",
|
||||
"version": "1.5.5",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chalk": "^5.4.1",
|
||||
@@ -18,13 +18,11 @@
|
||||
"moment": "^2.30.1",
|
||||
"nconf": "^1.0.0-beta.2",
|
||||
"node-cron": "^4.1.0",
|
||||
"os-name": "^6.1.0",
|
||||
"playwright": "^1.52.0",
|
||||
"user-agents": "^1.1.557"
|
||||
"os-name": "^6.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@aetherinox/noxenv": "^1.1.1",
|
||||
"@stylistic/eslint-plugin": "^4.4.1",
|
||||
"@stylistic/eslint-plugin": "^5.0.0",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"all-contributors-cli": "^6.26.1",
|
||||
"env-cmd": "^10.1.0",
|
||||
@@ -60,9 +58,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/runtime": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz",
|
||||
"integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==",
|
||||
"version": "7.27.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
|
||||
"integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -112,9 +110,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/config-array": {
|
||||
"version": "0.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
|
||||
"integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
|
||||
"version": "0.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz",
|
||||
"integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -126,10 +124,34 @@
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/config-array/node_modules/brace-expansion": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/config-array/node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/config-helpers": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
|
||||
"integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz",
|
||||
"integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -173,10 +195,34 @@
|
||||
"url": "https://opencollective.com/eslint"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/eslintrc/node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "9.28.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz",
|
||||
"integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==",
|
||||
"version": "9.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz",
|
||||
"integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -197,19 +243,32 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/plugin-kit": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
|
||||
"integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz",
|
||||
"integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@eslint/core": "^0.14.0",
|
||||
"@eslint/core": "^0.15.0",
|
||||
"levn": "^0.4.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
|
||||
"version": "0.15.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz",
|
||||
"integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@types/json-schema": "^7.0.15"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@humanfs/core": {
|
||||
"version": "0.19.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
|
||||
@@ -322,15 +381,16 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@stylistic/eslint-plugin": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.4.1.tgz",
|
||||
"integrity": "sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==",
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.0.0.tgz",
|
||||
"integrity": "sha512-nVV2FSzeTJ3oFKw+3t9gQYQcrgbopgCASSY27QOtkhEGgSfdQQjDmzZd41NeT1myQ8Wc6l+pZllST9qIu4NKzg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/utils": "^8.32.1",
|
||||
"eslint-visitor-keys": "^4.2.0",
|
||||
"espree": "^10.3.0",
|
||||
"@eslint-community/eslint-utils": "^4.7.0",
|
||||
"@typescript-eslint/types": "^8.34.1",
|
||||
"eslint-visitor-keys": "^4.2.1",
|
||||
"espree": "^10.4.0",
|
||||
"estraverse": "^5.3.0",
|
||||
"picomatch": "^4.0.2"
|
||||
},
|
||||
@@ -341,10 +401,24 @@
|
||||
"eslint": ">=9.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/types": {
|
||||
"version": "8.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz",
|
||||
"integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/typescript-eslint"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/estree": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
|
||||
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
|
||||
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
@@ -376,14 +450,14 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@typescript-eslint/project-service": {
|
||||
"version": "8.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz",
|
||||
"integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==",
|
||||
"version": "8.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz",
|
||||
"integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/tsconfig-utils": "^8.34.0",
|
||||
"@typescript-eslint/types": "^8.34.0",
|
||||
"@typescript-eslint/tsconfig-utils": "^8.34.1",
|
||||
"@typescript-eslint/types": "^8.34.1",
|
||||
"debug": "^4.3.4"
|
||||
},
|
||||
"engines": {
|
||||
@@ -398,14 +472,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/scope-manager": {
|
||||
"version": "8.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz",
|
||||
"integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==",
|
||||
"version": "8.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz",
|
||||
"integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "8.34.0",
|
||||
"@typescript-eslint/visitor-keys": "8.34.0"
|
||||
"@typescript-eslint/types": "8.34.1",
|
||||
"@typescript-eslint/visitor-keys": "8.34.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -416,9 +490,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/tsconfig-utils": {
|
||||
"version": "8.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz",
|
||||
"integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==",
|
||||
"version": "8.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz",
|
||||
"integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -433,9 +507,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/types": {
|
||||
"version": "8.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz",
|
||||
"integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==",
|
||||
"version": "8.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz",
|
||||
"integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -447,16 +521,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/typescript-estree": {
|
||||
"version": "8.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz",
|
||||
"integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==",
|
||||
"version": "8.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz",
|
||||
"integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/project-service": "8.34.0",
|
||||
"@typescript-eslint/tsconfig-utils": "8.34.0",
|
||||
"@typescript-eslint/types": "8.34.0",
|
||||
"@typescript-eslint/visitor-keys": "8.34.0",
|
||||
"@typescript-eslint/project-service": "8.34.1",
|
||||
"@typescript-eslint/tsconfig-utils": "8.34.1",
|
||||
"@typescript-eslint/types": "8.34.1",
|
||||
"@typescript-eslint/visitor-keys": "8.34.1",
|
||||
"debug": "^4.3.4",
|
||||
"fast-glob": "^3.3.2",
|
||||
"is-glob": "^4.0.3",
|
||||
@@ -475,56 +549,17 @@
|
||||
"typescript": ">=4.8.4 <5.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
|
||||
"version": "9.0.5",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
|
||||
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16 || 14 >=14.17"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/utils": {
|
||||
"version": "8.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz",
|
||||
"integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==",
|
||||
"version": "8.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz",
|
||||
"integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.7.0",
|
||||
"@typescript-eslint/scope-manager": "8.34.0",
|
||||
"@typescript-eslint/types": "8.34.0",
|
||||
"@typescript-eslint/typescript-estree": "8.34.0"
|
||||
"@typescript-eslint/scope-manager": "8.34.1",
|
||||
"@typescript-eslint/types": "8.34.1",
|
||||
"@typescript-eslint/typescript-estree": "8.34.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -539,14 +574,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/visitor-keys": {
|
||||
"version": "8.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz",
|
||||
"integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==",
|
||||
"version": "8.34.1",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz",
|
||||
"integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "8.34.0",
|
||||
"eslint-visitor-keys": "^4.2.0"
|
||||
"@typescript-eslint/types": "8.34.1",
|
||||
"eslint-visitor-keys": "^4.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -570,9 +605,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.14.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
|
||||
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
|
||||
"version": "8.15.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
|
||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
@@ -719,18 +754,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/array-includes": {
|
||||
"version": "3.1.8",
|
||||
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
|
||||
"integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
|
||||
"version": "3.1.9",
|
||||
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
|
||||
"integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind": "^1.0.7",
|
||||
"call-bind": "^1.0.8",
|
||||
"call-bound": "^1.0.4",
|
||||
"define-properties": "^1.2.1",
|
||||
"es-abstract": "^1.23.2",
|
||||
"es-object-atoms": "^1.0.0",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"is-string": "^1.0.7"
|
||||
"es-abstract": "^1.24.0",
|
||||
"es-object-atoms": "^1.1.1",
|
||||
"get-intrinsic": "^1.3.0",
|
||||
"is-string": "^1.1.1",
|
||||
"math-intrinsics": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
@@ -880,13 +917,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/braces": {
|
||||
@@ -1368,9 +1404,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/es-abstract": {
|
||||
"version": "1.23.10",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.10.tgz",
|
||||
"integrity": "sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==",
|
||||
"version": "1.24.0",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
|
||||
"integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1401,7 +1437,9 @@
|
||||
"is-array-buffer": "^3.0.5",
|
||||
"is-callable": "^1.2.7",
|
||||
"is-data-view": "^1.0.2",
|
||||
"is-negative-zero": "^2.0.3",
|
||||
"is-regex": "^1.2.1",
|
||||
"is-set": "^2.0.3",
|
||||
"is-shared-array-buffer": "^1.0.4",
|
||||
"is-string": "^1.1.1",
|
||||
"is-typed-array": "^1.1.15",
|
||||
@@ -1416,6 +1454,7 @@
|
||||
"safe-push-apply": "^1.0.0",
|
||||
"safe-regex-test": "^1.1.0",
|
||||
"set-proto": "^1.0.0",
|
||||
"stop-iteration-iterator": "^1.1.0",
|
||||
"string.prototype.trim": "^1.2.10",
|
||||
"string.prototype.trimend": "^1.0.9",
|
||||
"string.prototype.trimstart": "^1.0.8",
|
||||
@@ -1539,19 +1578,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "9.28.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz",
|
||||
"integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==",
|
||||
"version": "9.29.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz",
|
||||
"integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.12.1",
|
||||
"@eslint/config-array": "^0.20.0",
|
||||
"@eslint/config-array": "^0.20.1",
|
||||
"@eslint/config-helpers": "^0.2.1",
|
||||
"@eslint/core": "^0.14.0",
|
||||
"@eslint/eslintrc": "^3.3.1",
|
||||
"@eslint/js": "9.28.0",
|
||||
"@eslint/js": "9.29.0",
|
||||
"@eslint/plugin-kit": "^0.3.1",
|
||||
"@humanfs/node": "^0.16.6",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
@@ -1563,9 +1602,9 @@
|
||||
"cross-spawn": "^7.0.6",
|
||||
"debug": "^4.3.2",
|
||||
"escape-string-regexp": "^4.0.0",
|
||||
"eslint-scope": "^8.3.0",
|
||||
"eslint-visitor-keys": "^4.2.0",
|
||||
"espree": "^10.3.0",
|
||||
"eslint-scope": "^8.4.0",
|
||||
"eslint-visitor-keys": "^4.2.1",
|
||||
"espree": "^10.4.0",
|
||||
"esquery": "^1.5.0",
|
||||
"esutils": "^2.0.2",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
@@ -1615,19 +1654,6 @@
|
||||
"eslint": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-compat-utils/node_modules/semver": {
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-import-resolver-node": {
|
||||
"version": "0.3.9",
|
||||
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
|
||||
@@ -1651,9 +1677,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-module-utils": {
|
||||
"version": "2.12.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
|
||||
"integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
|
||||
"version": "2.12.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
|
||||
"integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1714,30 +1740,30 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-import": {
|
||||
"version": "2.31.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
|
||||
"integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
|
||||
"version": "2.32.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
|
||||
"integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@rtsao/scc": "^1.1.0",
|
||||
"array-includes": "^3.1.8",
|
||||
"array.prototype.findlastindex": "^1.2.5",
|
||||
"array.prototype.flat": "^1.3.2",
|
||||
"array.prototype.flatmap": "^1.3.2",
|
||||
"array-includes": "^3.1.9",
|
||||
"array.prototype.findlastindex": "^1.2.6",
|
||||
"array.prototype.flat": "^1.3.3",
|
||||
"array.prototype.flatmap": "^1.3.3",
|
||||
"debug": "^3.2.7",
|
||||
"doctrine": "^2.1.0",
|
||||
"eslint-import-resolver-node": "^0.3.9",
|
||||
"eslint-module-utils": "^2.12.0",
|
||||
"eslint-module-utils": "^2.12.1",
|
||||
"hasown": "^2.0.2",
|
||||
"is-core-module": "^2.15.1",
|
||||
"is-core-module": "^2.16.1",
|
||||
"is-glob": "^4.0.3",
|
||||
"minimatch": "^3.1.2",
|
||||
"object.fromentries": "^2.0.8",
|
||||
"object.groupby": "^1.0.3",
|
||||
"object.values": "^1.2.0",
|
||||
"object.values": "^1.2.1",
|
||||
"semver": "^6.3.1",
|
||||
"string.prototype.trimend": "^1.0.8",
|
||||
"string.prototype.trimend": "^1.0.9",
|
||||
"tsconfig-paths": "^3.15.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1747,6 +1773,17 @@
|
||||
"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-import/node_modules/brace-expansion": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-import/node_modules/debug": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
|
||||
@@ -1757,10 +1794,33 @@
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-import/node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-import/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-n": {
|
||||
"version": "17.19.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.19.0.tgz",
|
||||
"integrity": "sha512-qxn1NaDHtizbhVAPpbMT8wWFaLtPnwhfN/e+chdu2i6Vgzmo/tGM62tcJ1Hf7J5Ie4dhse3DOPMmDxduzfifzw==",
|
||||
"version": "17.20.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.20.0.tgz",
|
||||
"integrity": "sha512-IRSoatgB/NQJZG5EeTbv/iAx1byOGdbbyhQrNvWdCfTnmPxUT0ao9/eGOeG7ljD8wJBsxwE8f6tES5Db0FRKEw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1785,16 +1845,6 @@
|
||||
"eslint": ">=8.23.0"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-n/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-n/node_modules/globals": {
|
||||
"version": "15.15.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
|
||||
@@ -1808,35 +1858,6 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-n/node_modules/minimatch": {
|
||||
"version": "9.0.5",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
|
||||
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16 || 14 >=14.17"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-n/node_modules/semver": {
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-promise": {
|
||||
"version": "7.2.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.2.1.tgz",
|
||||
@@ -1857,9 +1878,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-scope": {
|
||||
"version": "8.3.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
|
||||
"integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
|
||||
"version": "8.4.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
|
||||
"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
@@ -1874,9 +1895,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-visitor-keys": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
|
||||
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
|
||||
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -1886,6 +1907,17 @@
|
||||
"url": "https://opencollective.com/eslint"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint/node_modules/brace-expansion": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint/node_modules/chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
@@ -1903,16 +1935,29 @@
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint/node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/espree": {
|
||||
"version": "10.3.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
|
||||
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
|
||||
"version": "10.4.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
|
||||
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"acorn": "^8.14.0",
|
||||
"acorn": "^8.15.0",
|
||||
"acorn-jsx": "^5.3.2",
|
||||
"eslint-visitor-keys": "^4.2.0"
|
||||
"eslint-visitor-keys": "^4.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -2217,15 +2262,6 @@
|
||||
"minimatch": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/filelist/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/filelist/node_modules/minimatch": {
|
||||
"version": "5.1.6",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
|
||||
@@ -2647,6 +2683,15 @@
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/http-errors/node_modules/statuses": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
||||
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/human-signals": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
|
||||
@@ -3001,6 +3046,19 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/is-negative-zero": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
|
||||
"integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||
@@ -3222,6 +3280,16 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/jake/node_modules/brace-expansion": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/jake/node_modules/chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
@@ -3238,6 +3306,18 @@
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/jake/node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/javascript-time-ago": {
|
||||
"version": "2.5.11",
|
||||
"resolved": "https://registry.npmjs.org/javascript-time-ago/-/javascript-time-ago-2.5.11.tgz",
|
||||
@@ -3373,10 +3453,6 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.clonedeep": {
|
||||
"version": "4.5.0",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
@@ -3510,15 +3586,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||
"version": "9.0.5",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
|
||||
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
"brace-expansion": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
"node": ">=16 || 14 >=14.17"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/minimist": {
|
||||
@@ -3650,9 +3730,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/node-cron": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/node-cron/-/node-cron-4.1.0.tgz",
|
||||
"integrity": "sha512-OS+3ORu+h03/haS6Di8Qr7CrVs4YaKZZOynZwQpyPZDnR3tqRbwJmuP2gVR16JfhLgyNlloAV1VTrrWlRogCFA==",
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/node-cron/-/node-cron-4.1.1.tgz",
|
||||
"integrity": "sha512-oJj9CYV7teeCVs+y2Efi5IQ4FGmAYbsXQOehc1AGLlwteec8pC7DjBCUzSyRQ0LYa+CRCgmD+vtlWQcnPpXowA==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
@@ -4039,32 +4119,6 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright": {
|
||||
"version": "1.52.0",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"playwright-core": "1.52.0"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright-core": {
|
||||
"version": "1.52.0",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"playwright-core": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/possible-typed-array-names": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
|
||||
@@ -4462,13 +4516,16 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"version": "7.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/send": {
|
||||
@@ -4671,14 +4728,28 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/statuses": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
||||
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
|
||||
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/stop-iteration-iterator": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
|
||||
"integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"internal-slot": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/string-width": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||
@@ -5110,15 +5181,6 @@
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/user-agents": {
|
||||
"version": "1.1.557",
|
||||
"resolved": "https://registry.npmjs.org/user-agents/-/user-agents-1.1.557.tgz",
|
||||
"integrity": "sha512-7WD00n8KYmGlQEVgV4qRvH7NkcRt9KgEd7Sc95nRPcHCK8iOa5Ke85psgQKI6R+iWmBuuQKNKl2e46m6EvUTfA==",
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"lodash.clonedeep": "^4.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tvapp2",
|
||||
"version": "1.5.4",
|
||||
"version": "1.5.5",
|
||||
"description": "This package allows you to generate M3U playlists and EPG guides from various online IPTV services.",
|
||||
"author": "BinaryNinja",
|
||||
"license": "MIT",
|
||||
@@ -75,8 +75,6 @@
|
||||
"dependencies": {
|
||||
"cron": "^4.3.1",
|
||||
"node-cron": "^4.1.0",
|
||||
"playwright": "^1.52.0",
|
||||
"user-agents": "^1.1.557",
|
||||
"chalk": "^5.4.1",
|
||||
"ejs": "^3.1.10",
|
||||
"moment": "^2.30.1",
|
||||
@@ -97,7 +95,7 @@
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
"eslint-plugin-n": "^17.19.0",
|
||||
"eslint-plugin-promise": "^7.2.1",
|
||||
"@stylistic/eslint-plugin": "^4.4.1"
|
||||
"@stylistic/eslint-plugin": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
|
||||
1104
tvapp2/www/css/tvapp2.min.css
vendored
1104
tvapp2/www/css/tvapp2.min.css
vendored
File diff suppressed because it is too large
Load Diff
@@ -16,11 +16,11 @@
|
||||
<!-- Header -->
|
||||
<div class="header">
|
||||
<nav class="navbar sticky-top container">
|
||||
<div class="navbar-brand">
|
||||
<div class="brand">
|
||||
<i data-bs-toggle="tooltip" title="v<%= appVersion %>" class="logo fa-sharp-duotone fa-regular fa-tv" style="--fa-primary-color: rgb(255, 255, 255); --fa-secondary-color: rgb(255, 255, 255);" aria-hidden="true"></i>
|
||||
<a target="_blank" data-bs-toggle="tooltip" title="View Github Repository" class="header-name" href="<%= appUrlGithub %>">TVApp2 for Docker</a>
|
||||
</div>
|
||||
<div class="navbar-social">
|
||||
<div class="social">
|
||||
<i id="action-health" data-bs-toggle="tooltip" title="Health" class="heart logo health fa-duotone fa-solid fa-heart" style="--fa-primary-color: rgb(255, 255, 255); --fa-secondary-color: rgb(255, 255, 255);" aria-hidden="true"></i>
|
||||
<a href="javascript:runResync();"><i id="action-resync" data-bs-toggle="tooltip" title="Resync" class="restart fa-solid fa-rotate" style="--fa-primary-color: rgb(255, 255, 255); --fa-secondary-color: rgb(255, 255, 255);" aria-hidden="true"></i></a>
|
||||
<a target="_blank" href="<%= appUrlDocs %>"><i data-bs-toggle="tooltip" title="Documentation" class="logo fa-duotone fa-solid fa-book-open-cover" style="--fa-primary-color: rgb(255, 255, 255); --fa-secondary-color: rgb(255, 255, 255);" aria-hidden="true"></i></a>
|
||||
@@ -32,10 +32,27 @@
|
||||
|
||||
<!-- Header Notification: description -->
|
||||
<div class="container">
|
||||
<div class="container header-container">
|
||||
<div class="introduction">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="about">This page displays your most recent copies of the <code><%= fileM3U %></code> playlist and <code><%= fileXML %></code> EPG guide data. Right-click each file, select <span class="text-accent">Copy Link</span> and paste the URLs within an IPTV app such as Jellyfin. The <code><%= fileXML %></code> and <code><%= fileGZP %></code> have identical guide data, however the <code><%= fileGZP %></code> is compressed and will import into your IPTV application much faster.</div>
|
||||
<div class="introduction-body">
|
||||
<div class="desc">
|
||||
This page displays your most recent copies of the <code><%= fileM3U %></code> playlist and <code><%= fileXML %></code>
|
||||
EPG guide data. Right-click each file, select <span class="accent">Copy Link</span> and paste the URLs within an IPTV
|
||||
app such as Jellyfin. The <code><%= fileXML %></code> and <code><%= fileGZP %></code> have identical guide data,
|
||||
however the <code><%= fileGZP %></code> is compressed and will import into your IPTV application much faster.
|
||||
|
||||
<br />
|
||||
|
||||
<div class="badges">
|
||||
<img src="https://img.shields.io/github/v/tag/TheBinaryNinja/tvapp2?logo=GitHub&label=Version&color=ba5225">
|
||||
<img src="https://img.shields.io/github/downloads/TheBinaryNinja/tvapp2/total?logo=github&logoColor=FFFFFF&label=Downloads&color=376892">
|
||||
<img src="https://img.shields.io/github/repo-size/TheBinaryNinja/tvapp2?logo=github&label=Size&color=59702a">
|
||||
<img src="https://img.shields.io/badge/dynamic/xml?url=https%3A%2F%2Fgithub.com%2Faetherinox%2Fbackage%2Fraw%2Findex%2FTheBinaryNinja%2Ftvapp2%2Ftvapp2.xml&query=%2Fxml%2Fdownloads&label=Pulls&logo=github&color=de1f5e">
|
||||
<img src="https://img.shields.io/github/last-commit/TheBinaryNinja/tvapp2?logo=conventionalcommits&logoColor=FFFFFF&label=Last%20Commit&color=313131">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -116,12 +133,13 @@
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="footer">
|
||||
<div class="container" style="padding-bottom:20px;">
|
||||
<div id="ntfy-restart" class="ntfy ntfy-success sticky-bottom"></div>
|
||||
<div id="ntfy-firewall" class="ntfy ntfy-warning sticky-bottom"></div>
|
||||
<div id="ntfy-localhost" class="ntfy ntfy-danger sticky-bottom"></div>
|
||||
<div class="container notifications" style="padding-bottom:20px;">
|
||||
<div id="ntfy-restart" class="ntfy-parent indicator-success sticky-bottom"></div>
|
||||
<div id="ntfy-firewall" class="ntfy-parent indicator-warning sticky-bottom"></div>
|
||||
<div id="ntfy-localhost" class="ntfy-parent indicator-danger sticky-bottom"></div>
|
||||
</div>
|
||||
<div class="footer-inner">
|
||||
|
||||
<div class="sub">
|
||||
<div class="container">
|
||||
<div class="col text-center text-muted text-small text-nowrap">
|
||||
<small>Developed by BinaryNinja - <a data-bs-toggle="tooltip" title="v<%= appVersion %> <%= appRelease %> (<%= appGitHashShort %>)" href="<%= appUrlGithub %>"><%= appName %> (<%= appRelease %>)</a> v<%= appVersion %> <a target="_blank" data-bs-toggle="tooltip" title="View Github commit" href="<%= appUrlGithub %>/commit/<%= appGitHashLong %>"><%= appGitHashShort %></a></small><br />
|
||||
@@ -218,6 +236,53 @@
|
||||
|
||||
<script>
|
||||
|
||||
/*
|
||||
this is test code. enable the "Show Toast" button and then uncomment this code.
|
||||
|
||||
document.getElementById("btnTestToasts").onclick = function()
|
||||
{
|
||||
var toastElList = [].slice.call(document.querySelectorAll('.toast'))
|
||||
var toastList = toastElList.map(function(toastEl)
|
||||
{
|
||||
return new bootstrap.Toast(toastEl)
|
||||
});
|
||||
|
||||
toastList.forEach(toast => toast.show());
|
||||
console.log(toastList);
|
||||
};
|
||||
*/
|
||||
|
||||
var tooltipList = [].slice.call( document.querySelectorAll( '[data-bs-toggle="tooltip"]' ) )
|
||||
var tooltipList = tooltipList.map( function ( el )
|
||||
{
|
||||
return new bootstrap.Tooltip(el,
|
||||
{
|
||||
placement: "bottom",
|
||||
trigger: "hover",
|
||||
html: true
|
||||
});
|
||||
})
|
||||
|
||||
/*
|
||||
Helper > Get Multiple Elements by ID
|
||||
*/
|
||||
|
||||
function getElementsById( ids )
|
||||
{
|
||||
const idList = ids.split(" ");
|
||||
let results = [], item;
|
||||
for ( let i = 0; i < idList.length; i++ )
|
||||
{
|
||||
item = document.getElementById( idList[ i ] );
|
||||
if (item)
|
||||
{
|
||||
results.push( item );
|
||||
}
|
||||
}
|
||||
|
||||
return( results );
|
||||
}
|
||||
|
||||
/*
|
||||
Document Ready
|
||||
*/
|
||||
@@ -244,21 +309,27 @@
|
||||
Notify > Localhost
|
||||
*/
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.addEventListener( 'DOMContentLoaded', function()
|
||||
{
|
||||
const host = window.location.hostname;
|
||||
const port = window.location.port || (window.location.protocol === 'https:' ? '443' : '80');
|
||||
if (host === 'localhost' || host === '127.0.0.1')
|
||||
{
|
||||
const msg = "<p><span class='warning'>Warning</span> If you are accessing this page via 127.0.0.1 or localhost, proxying will not work on other devices.Please load \
|
||||
this page using your computer's IP address (e.g., 192.168.x.x) and port in order to access the playlist from other devices on your network.</p> \
|
||||
<br> \
|
||||
<p> Learn how to locate your IP address on <a href='https://youtube.com/watch?v=UAhDHXN2c6E' target = '_blank' > Windows</a> or \
|
||||
<a href='https://youtube.com/watch?v=gaIYP4TZfHI' target = '_blank' > Linux</a>.</p>";
|
||||
|
||||
document.getElementById('ntfy-localhost').innerHTML = msg;
|
||||
document.getElementById('ntfy-localhost').style.display = 'block';
|
||||
const msg = "<div class='ntfy-child'><span class='danger'>Danger</span> \
|
||||
<span class='msg'> \
|
||||
If you are accessing this page via 127.0.0.1 or localhost, proxying will not work on other devices.Please load \
|
||||
this page using your computer's IP address (e.g., 192.168.x.x) and port in order to access the playlist from other \
|
||||
devices on your network. \
|
||||
<br> <br> \
|
||||
Learn how to locate your IP address on <a href='https://youtube.com/watch?v=UAhDHXN2c6E' target = '_blank' > Windows</a> \
|
||||
or <a href='https://youtube.com/watch?v=gaIYP4TZfHI' target = '_blank' > Linux</a>.\
|
||||
</span></div>";
|
||||
|
||||
document.getElementById( 'ntfy-localhost' ).innerHTML = msg;
|
||||
document.getElementById( 'ntfy-localhost' ).style.display = 'block';
|
||||
} else {
|
||||
document.getElementById('ntfy-localhost').style.display = 'none';
|
||||
document.getElementById( 'ntfy-localhost' ).style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
@@ -266,27 +337,38 @@
|
||||
Notify > Firewall
|
||||
*/
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.addEventListener( 'DOMContentLoaded', function()
|
||||
{
|
||||
const port = window.location.port || (window.location.protocol === 'https:' ? '443' : '80');
|
||||
const msg = "<p><span class='notice'>Notice</span> Port <strong> " + port + " </strong> must be open and allowed through your <a href='https://youtu.be/zOZWlTplrcA?si=nGXrHKU4sAQsy18e&t=18 target='_blank'>Windows</a> \
|
||||
or <a href='https://youtu.be/7c_V_3nWWbA?si=Hkd_II9myn-AkNnS&t=12' target='_blank'>Linux</a> OS firewall settings \
|
||||
This action enables devices such as Firestick or Android to connect to the server and request the playlist through the proxy.</p>";
|
||||
const msg = "<div class='ntfy-child'><span class='warning'>Warning</span> \
|
||||
<span class='msg'> \
|
||||
Port <strong> " + port + " </strong> must be open and allowed through your \
|
||||
<a href='https://youtu.be/zOZWlTplrcA?si=nGXrHKU4sAQsy18e&t=18 target='_blank'>Windows</a> \
|
||||
or \
|
||||
<a href='https://youtu.be/7c_V_3nWWbA?si=Hkd_II9myn-AkNnS&t=12' target='_blank'>Linux</a> \
|
||||
OS firewall settings. This action enables devices such as Firestick or Android to connect \
|
||||
to the server and request the playlist through the proxy. \
|
||||
</span></div>";
|
||||
|
||||
document.getElementById('ntfy-firewall').innerHTML = msg;
|
||||
document.getElementById('ntfy-firewall').style.display = 'block';
|
||||
document.getElementById( 'ntfy-firewall' ).innerHTML = msg;
|
||||
document.getElementById( 'ntfy-firewall' ).style.display = 'block';
|
||||
});
|
||||
|
||||
/*
|
||||
Notify > Restart / Resync
|
||||
*/
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.addEventListener( 'DOMContentLoaded', function()
|
||||
{
|
||||
const port = window.location.port || (window.location.protocol === 'https:' ? '443' : '80');
|
||||
const msg = "<p><span class='success'>Success</span> Your IPTV m3u channels and xml guide data has been successfully re-synced. \
|
||||
Please refresh this window to see new data</p>";
|
||||
const msg = "<div class='ntfy-child'><span class='success'>Success</span> \
|
||||
<span class='msg'> \
|
||||
Your IPTV m3u channels and xml guide data has been successfully re-synced. \
|
||||
Please refresh this window to see new data \
|
||||
</span></div>";
|
||||
|
||||
document.getElementById('ntfy-restart').innerHTML = msg;
|
||||
document.getElementById('ntfy-restart').style.display = 'none';
|
||||
document.getElementById( 'ntfy-restart' ).innerHTML = msg;
|
||||
document.getElementById( 'ntfy-restart' ).style.display = 'none';
|
||||
});
|
||||
|
||||
/*
|
||||
@@ -318,11 +400,12 @@
|
||||
url: 'api/health',
|
||||
type: 'GET',
|
||||
data: {
|
||||
query: 'healthcheck'
|
||||
query: 'healthcheck',
|
||||
silent: false
|
||||
},
|
||||
beforeSend: function( data )
|
||||
{
|
||||
console.log('Sending health check ...')
|
||||
console.log( 'Sending health check ...' )
|
||||
},
|
||||
success: function( data )
|
||||
{
|
||||
@@ -337,6 +420,16 @@
|
||||
$('.toast #toast-title').html(`<%= appName %> is ${ status }`);
|
||||
$('.toast #toast-message').html(`Health check returned ${ status } (${ code })`);
|
||||
$('#tvapp2Toast').toast('show');
|
||||
|
||||
const elementsList = document.querySelectorAll( '#ntfy-firewall, #ntfy-localhost, #ntfy-restart' );
|
||||
const elementsArray = [...elementsList];
|
||||
|
||||
elementsArray.forEach(element =>
|
||||
{
|
||||
element.style.transition = '1s';
|
||||
element.style.opacity = '0';
|
||||
element.style.visibility = 'hidden';
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
@@ -376,7 +469,8 @@
|
||||
url: 'api/health',
|
||||
type: 'GET',
|
||||
data: {
|
||||
query: 'uptime'
|
||||
query: 'uptime',
|
||||
silent: true
|
||||
},
|
||||
success: function( data )
|
||||
{
|
||||
@@ -422,7 +516,8 @@
|
||||
url: 'api/restart',
|
||||
type: 'GET',
|
||||
data: {
|
||||
query: 'sync'
|
||||
query: 'sync',
|
||||
silent: false
|
||||
},
|
||||
beforeSend: function( data )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user