Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
783c5a5
update core doc detail & architecture
Sn0wAlice Feb 25, 2026
8bf044e
add dev file, scripts and setup
Sn0wAlice Feb 25, 2026
0475f56
migrate view.py to clean multi file
Sn0wAlice Feb 25, 2026
3c8dfca
migrate from Materialize CSS to TailwindCSS
Sn0wAlice Feb 25, 2026
bb51fd9
migrate from Materialize CSS to TailwindCSS - patch
Sn0wAlice Feb 25, 2026
5fb5f45
purge empty forms
Sn0wAlice Feb 25, 2026
97b43b8
URL routing patch
Sn0wAlice Feb 25, 2026
846dbbf
cleanup images manager
Sn0wAlice Feb 25, 2026
d8ceb56
migrate view.py to clean multi file
Sn0wAlice Feb 25, 2026
316da32
update core doc detail & architecture
tcely Feb 26, 2026
99819e7
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Feb 26, 2026
62d9802
Add blank lines
tcely Feb 26, 2026
71a1854
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Feb 26, 2026
b97ff2f
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Feb 26, 2026
96c28cd
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Feb 26, 2026
68dbd05
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Feb 26, 2026
173bb5a
Download with `asfald` in scripts/setup-dev.sh
tcely Feb 26, 2026
2d017e6
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Mar 23, 2026
b77c6c5
feat: integrate tailwindcss into the build
tcely Mar 24, 2026
6975b93
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Mar 24, 2026
644778e
feat: integrate tailwindcss into the build
tcely Mar 24, 2026
23b0633
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Mar 24, 2026
0427a25
Remove django-sass-processor from Pipfile
tcely Mar 24, 2026
b98f243
Add pycodestyle to development packages
tcely Mar 24, 2026
04434a6
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Mar 24, 2026
c14107c
fix: fontawesome was broken
tcely Mar 24, 2026
c8903d4
Merge branch 'test-Sn0wAlice-pr-1402' into main
tcely Mar 24, 2026
b05ef85
fix: broken symbolic links
tcely Mar 24, 2026
c641e94
Add FontAwesome stylesheet to base.html
tcely Mar 24, 2026
95adffc
Remove Font Awesome import from tubesync.css
tcely Mar 24, 2026
865c57f
Link up fontawesome CSS and web font files
tcely Mar 24, 2026
542d10e
Allow a different tasks directory for `sqlite_tasks`
tcely Mar 24, 2026
3ae0448
Add pycodestyle to dev-packages
tcely Mar 24, 2026
207ba7b
Download and verify the `tailwindcss` CLI binary
tcely Mar 24, 2026
261fce5
Run tests for PRs targeting `test-*` branches too
tcely Mar 24, 2026
27e685d
Stop using `ContentFile`
tcely Mar 24, 2026
37a3943
Split up tubesync/sync/views.py
tcely Mar 24, 2026
56a36a7
Point at the wiki and tweak the README
tcely Mar 24, 2026
6db7a9a
Release for 2026-004
tcely Mar 27, 2026
afd9503
Upgrade no-response
tcely Mar 28, 2026
e6afb24
Create fettle.pl
tcely Mar 28, 2026
31db488
Create debconf.diff
tcely Mar 28, 2026
40a146e
Update Dockerfile
tcely Mar 28, 2026
bec2933
Merge pull request #1436 from meeb/release-2026-004
tcely Mar 28, 2026
97dd194
chore: move outputs into the FFmpeg action
tcely Mar 28, 2026
dd0d1a8
chore: clean up white-space
tcely Mar 28, 2026
4502713
fix: switch to the `docker/github-builder` reusable action
tcely Mar 28, 2026
dc6ed94
fix: clean up outputs for the info job
tcely Mar 28, 2026
3c5022e
chore: increase the target version for python
tcely Mar 28, 2026
54f7975
fix: use `uv` to install everything for tests
tcely Mar 28, 2026
b27be89
fix(no-response): use the issue branch until the next release
tcely Mar 29, 2026
61d97ef
fix(no-response): use the releases branch
tcely Mar 30, 2026
b30d792
Merge pull request #1412 from meeb/tcely-docker
tcely Mar 31, 2026
bc17527
address PR #1402 review feedback
Sn0wAlice Mar 31, 2026
01a77b3
use shasum.py instead of sha256sum for cross-platform checksum verifi…
Sn0wAlice Mar 31, 2026
0cd986b
Update scripts/setup-dev.sh
Sn0wAlice Mar 31, 2026
c72e69a
Update scripts/setup-dev.sh
Sn0wAlice Mar 31, 2026
e15e8d3
Merge pull request #1437 from meeb/tcely-release-workflow
tcely Mar 31, 2026
5be4200
cherry-pick #c6878ed
Sn0wAlice Mar 31, 2026
d762cec
Rework ARCH & OS
tcely Apr 1, 2026
b4bbb9f
DRY cases for TW_BIN
tcely Apr 1, 2026
15c7998
Adjust paths for a tailwind subdirectory
tcely Apr 1, 2026
413b8bc
Update and rename tubesync/common/static/styles/tubesync.css to tubes…
tcely Apr 1, 2026
b86ad7f
Use the `get_usable_cpu_count` function
tcely Apr 1, 2026
b1a16ba
Remove the now unused `os` import
tcely Apr 1, 2026
8b832ef
Remove files that were added to the wiki
tcely Apr 1, 2026
6eba36d
Use individual stylesheets
tcely Apr 1, 2026
0e221f2
Merge branch 'main' into split-pr-1402
tcely Apr 1, 2026
4844dd3
Add Font Awesome dependency analysis script
tcely Apr 1, 2026
e1449fb
Add the `get_usable_cpu_count` function
tcely Apr 1, 2026
d9ed019
Use the `get_usable_cpu_count` function
tcely Apr 1, 2026
7baac1b
Update docs/wiki
tcely Apr 1, 2026
c09a87b
Merge pull request #1440 from meeb/tcely-editing-1
tcely Apr 1, 2026
a2a0db9
Merge pull request #1434 from meeb/split-pr-1402
tcely Apr 1, 2026
fa2e9f2
Merge branch 'meeb:main' into main
tcely Apr 1, 2026
2ab0cec
update core doc detail & architecture
Sn0wAlice Feb 25, 2026
7cab194
add dev file, scripts and setup
Sn0wAlice Feb 25, 2026
e755534
migrate view.py to clean multi file
Sn0wAlice Feb 25, 2026
b9e89ee
migrate from Materialize CSS to TailwindCSS
Sn0wAlice Feb 25, 2026
849569e
migrate from Materialize CSS to TailwindCSS - patch
Sn0wAlice Feb 25, 2026
c0fe469
URL routing patch
Sn0wAlice Feb 25, 2026
4a3e63e
update core doc detail & architecture
tcely Feb 26, 2026
fb22883
Download with `asfald` in scripts/setup-dev.sh
tcely Feb 26, 2026
f6bc3b2
feat: integrate tailwindcss into the build
tcely Mar 24, 2026
0b5a3a1
feat: integrate tailwindcss into the build
tcely Mar 24, 2026
7e7dc57
Remove django-sass-processor from Pipfile
tcely Mar 24, 2026
e1b9e39
feat: integrate tailwindcss into the build
tcely Mar 24, 2026
fcb859f
fix: fontawesome was broken
tcely Mar 24, 2026
8549725
fix: broken symbolic links
tcely Mar 24, 2026
30429ae
Add FontAwesome stylesheet to base.html
tcely Mar 24, 2026
47d15d3
Remove Font Awesome import from tubesync.css
tcely Mar 24, 2026
a650ed1
address PR #1402 review feedback
Sn0wAlice Mar 31, 2026
6ce96d9
use shasum.py instead of sha256sum for cross-platform checksum verifi…
Sn0wAlice Mar 31, 2026
9a55e43
Update scripts/setup-dev.sh
Sn0wAlice Mar 31, 2026
b983f1d
Update scripts/setup-dev.sh
Sn0wAlice Mar 31, 2026
c2c2f09
Rework ARCH & OS
tcely Apr 1, 2026
79b8d34
DRY cases for TW_BIN
tcely Apr 1, 2026
22337ec
Adjust paths for a tailwind subdirectory
tcely Apr 1, 2026
ff40a5e
Update and rename tubesync/common/static/styles/tubesync.css to tubes…
tcely Apr 1, 2026
ad269e2
Remove files that were added to the wiki
tcely Apr 1, 2026
de9288b
Use individual stylesheets
tcely Apr 1, 2026
7ef98d1
Merge branch 'meeb:main' into main
tcely Apr 1, 2026
eb6a703
migrate to Django 6, update css & settings
Sn0wAlice Apr 1, 2026
64f3aab
Merge remote-tracking branch 'pr-1402/main' into pr-1402-main
tcely Apr 1, 2026
7a92aa7
Remove the duplicated import
tcely Apr 1, 2026
fd90a52
update remove_enclosed
Sn0wAlice Apr 1, 2026
063f1ba
migrate to uv
Sn0wAlice Apr 1, 2026
5e18b1f
patch tubesync/sync/views/tasks.py
Sn0wAlice Apr 1, 2026
3e11bbc
Use a single pipenv process
tcely Apr 1, 2026
6d8940a
tweak formatting
tcely Apr 1, 2026
faa6f97
remove duplicate entries
tcely Apr 1, 2026
8db60ca
move fonts.css and adjust paths
tcely Apr 1, 2026
aa060b6
refactor Makefile
tcely Apr 1, 2026
24bc84f
Add Bulma css files
tcely Apr 1, 2026
8ef799d
Create htagsum.py
tcely Apr 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion .github/actions/FFmpeg/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@ outputs:
releases:
value: ${{ steps.set.outputs.releases }}
description: 'Generated JSON describing the released builds.'
date:
value: ${{ steps.jq_vars.outputs.FFMPEG_DATE }}
description: 'The selected build date.'
version:
value: ${{ steps.jq_vars.outputs.FFMPEG_VERSION }}
description: 'The version from the build matching the date.'

runs:
using: 'composite'
Expand All @@ -56,7 +62,7 @@ runs:
command -v jq >/dev/null ;
gql_query='query($repo: String!, $owner: String!, $releases: Int!, $assets: Int!) { repository(owner: $owner, name: $repo) { releases(first: $releases, orderBy: { field: CREATED_AT, direction: DESC }) { nodes { tagName, isDraft, isPrerelease, isLatest, tag { name, target { oid, commitUrl } }, releaseAssets(first: $assets) { totalCount, nodes { name, size, downloadUrl } } } } } }' ;
gql_jq='[ .data.repository.releases.nodes[] | select((.isLatest or .isDraft or .isPrerelease) | not) | { "tag": .tag.name, "commit": .tag.target.oid, "date": .tag.name[1+(.tag.name|index("-")):], "assets": { "limit": '"${GH_API_GQL_ASSETS}"', "totalCount": .releaseAssets.totalCount }, "files": .releaseAssets.nodes, "versions": [ .releaseAssets.nodes[].name | select(contains("-linux64-"))[1+index("-"):index("-linux64-")] ] } ]' ;
mk_delim() { printf -- '"%s_EOF_%d_"' "$1" "${RANDOM}" ; } ;
mk_delim() { local f='%s_EOF_%d_' ; printf -- "${f}" "$1" "${RANDOM}" ; } ;
open_ml_var() { local f=''\%'s<<'\%'s\n' ; printf -- "${f}" "$2" "$1" ; } ;
close_ml_var() { local f='%s\n' ; printf -- "${f}" "$1" ; } ;
{
Expand All @@ -79,3 +85,34 @@ runs:
-F repo="${GH_API_GQL_REPO}" \
-F releases="${GH_API_GQL_RELEASES}" \
-f query="${gql_query}" --jq "${gql_jq}" | jq '.[]' -- ;

- name: Set outputs with jq
id: jq_vars
shell: 'bash'
run: |
cat >| .ffmpeg.releases.json <<'EOF'
${{ steps.set.outputs.releases }}
EOF
mk_delim() { local f='%s_EOF_%d_' ; printf -- "${f}" "$1" "${RANDOM}" ; } ;
open_ml_var() { local f=''\%'s<<'\%'s\n' ; printf -- "${f}" "$2" "$1" ; } ;
close_ml_var() { local f='%s\n' ; printf -- "${f}" "$1" ; } ;
{
var='FFMPEG_DATE' ;
delim="$(mk_delim "${var}")" ;
open_ml_var "${delim}" "${var}" ;
jq_arg='[foreach .[] as $release ([{}, []]; [ .[0] + {($release.commit): ([ $release.date ] + (.[0][($release.commit)] // []) ) }, [ .[1][0] // $release.commit ] ] ; .[0][(.[1][0])] ) ][-1][0]' ;
jq -r "${jq_arg}" -- .ffmpeg.releases.json ;
close_ml_var "${delim}" "${var}" ;

ffmpeg_date="$( jq -r "${jq_arg}" -- .ffmpeg.releases.json )"

var='FFMPEG_VERSION' ;
delim="$(mk_delim "${var}")" ;
open_ml_var "${delim}" "${var}" ;
jq_arg='.[]|select(.date == $date)|.versions[]|select(startswith("N-"))' ;
jq -r --arg date "${ffmpeg_date}" "${jq_arg}" -- .ffmpeg.releases.json ;
close_ml_var "${delim}" "${var}" ;
unset -v delim jq_arg var ;
} >> "${GITHUB_OUTPUT}"
cat -v "${GITHUB_OUTPUT}"
rm -v -f .ffmpeg.releases.json
2 changes: 1 addition & 1 deletion .github/actions/get-tag/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ runs:
then
tag="${tag#[Vv]}"
fi

set_sl_var() { local f='%s=%s\n' ; printf -- "${f}" "$@" ; } ;

set_sl_var tag "${tag}" >> "${GITHUB_OUTPUT}"
Expand Down
59 changes: 9 additions & 50 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,25 +33,14 @@ jobs:
outputs:
IMAGE_NAME: ${{ env.IMAGE_NAME }}
REGISTRY: ${{ env.REGISTRY }}
ffmpeg-date: ${{ steps.jq.outputs.FFMPEG_DATE }}
ffmpeg-releases: ${{ steps.ffmpeg.outputs.releases }}
ffmpeg-version: ${{ steps.jq.outputs.FFMPEG_VERSION }}
ffmpeg-date: ${{ steps.ffmpeg.outputs.date }}
# ffmpeg-releases: ${{ steps.ffmpeg.outputs.releases }}
ffmpeg-version: ${{ steps.ffmpeg.outputs.version }}
lowercase-github-actor: ${{ steps.github-actor.outputs.lowercase }}
lowercase-github-repository_owner: ${{ steps.github-repository_owner.outputs.lowercase }}
ytdlp-latest-release: ${{ steps.yt-dlp.outputs.latest-release }}
ytdlp-releases: ${{ steps.yt-dlp.outputs.releases }}
missing-tags: ${{ steps.tagged.outputs.missing }}
missing-tags-image: ${{ steps.tagged.outputs.image }}
# ytdlp-releases: ${{ steps.yt-dlp.outputs.releases }}
steps:
- name: Pull tagged releases
id: tagged
run: |
image='ghcr.io/meeb/${{ env.IMAGE_NAME }}'
missing=''
set_sl_var() { local f='%s=%s\n' ; printf -- "${f}" "$@" ; } ;
set -eux
set_sl_var image "${image}" >> "${GITHUB_OUTPUT}"
set_sl_var missing "${missing}" >> "${GITHUB_OUTPUT}"
- uses: actions/checkout@v6
- name: Lowercase github username
id: github-actor
Expand All @@ -69,35 +58,6 @@ jobs:
- name: Retrieve yt-dlp/yt-dlp releases with GitHub CLI
id: yt-dlp
uses: ./.github/actions/yt-dlp
- name: Set outputs with jq
id: jq
run: |
cat >| .ffmpeg.releases.json <<'EOF'
${{ steps.ffmpeg.outputs.releases }}
EOF
mk_delim() { local f='%s_EOF_%d_' ; printf -- "${f}" "$1" "${RANDOM}" ; } ;
open_ml_var() { local f=''\%'s<<'\%'s\n' ; printf -- "${f}" "$2" "$1" ; } ;
close_ml_var() { local f='%s\n' ; printf -- "${f}" "$1" ; } ;
{
var='FFMPEG_DATE' ;
delim="$(mk_delim "${var}")" ;
open_ml_var "${delim}" "${var}" ;
jq_arg='[foreach .[] as $release ([{}, []]; [ .[0] + {($release.commit): ([ $release.date ] + (.[0][($release.commit)] // []) ) }, [ .[1][0] // $release.commit ] ] ; .[0][(.[1][0])] ) ][-1][0]' ;
jq -r "${jq_arg}" -- .ffmpeg.releases.json ;
close_ml_var "${delim}" "${var}" ;

ffmpeg_date="$( jq -r "${jq_arg}" -- .ffmpeg.releases.json )"

var='FFMPEG_VERSION' ;
delim="$(mk_delim "${var}")" ;
open_ml_var "${delim}" "${var}" ;
jq_arg='.[]|select(.date == $date)|.versions[]|select(startswith("N-"))' ;
jq -r --arg date "${ffmpeg_date}" "${jq_arg}" -- .ffmpeg.releases.json ;
close_ml_var "${delim}" "${var}" ;
unset -v delim jq_arg var ;
} >> "${GITHUB_OUTPUT}"
cat -v "${GITHUB_OUTPUT}"
rm -v -f .ffmpeg.releases.json

test:
if: ${{ !cancelled() && ( 'pull_request' != github.event_name || (! github.event.pull_request.draft) ) }}
Expand All @@ -121,12 +81,11 @@ jobs:
run: |
python -m pip install uv
uv --no-config --no-managed-python --no-progress \
pip install --system --strict pipenv
pipenv lock
pipenv requirements | tee requirements.txt
#PIPENV_VERBOSITY=64 pipenv install --system --skip-lock
tool run pipenv requirements --dev --no-lock >| Pipfile-requirements.txt
uv --no-config --no-managed-python --no-progress \
pip compile --format requirements.txt --generate-hashes --output-file Pipfile-requirements-with-hashes.txt Pipfile-requirements.txt
uv --no-config --no-managed-python --no-progress \
pip install --system --strict --requirements requirements.txt
pip install --system --strict --requirements Pipfile-requirements-with-hashes.txt
- name: Set up Django environment
run: |
mkdir -v -p ~/.config/TubeSync/config
Expand All @@ -139,7 +98,7 @@ jobs:
- name: Check with ruff
continue-on-error: false
run: |
target_version='py310'
target_version='py312'
ignore_csv_list='E701,E722,E731'
cd tubesync
# output formats:
Expand Down
14 changes: 10 additions & 4 deletions .github/workflows/no-response.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
name: No Response

# `issues`.`closed`, `issue_comment`.`created`, and `scheduled` event types are required for this Action
# `issues`.`closed`, `issues`.`labeled`, `issue_comment`.`created`,
# and `scheduled` event types are required for this Action
# to work properly.
on:
workflow_dispatch:
issues:
types: [closed]
types: [closed, labeled]
issue_comment:
types: [created]
schedule:
- cron: '19,43 * * * *'
# A recurring 40, 30, 70, 50, 40, 70 minute gap pattern
- cron: '7 1,6,11,16,21 * * *'
- cron: '17 4,9,14,19 * * *'
- cron: '27 0,5,10,15,20,23 * * *'
- cron: '37 1,3,6,8,11,13,16,18,21 * * *'
- cron: '47 2,7,12,17,22 * * *'

jobs:
noResponse:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- uses: tcely/no-response@v0.1.4
- uses: tcely/no-response@v0.2
with:
token: ${{ github.token }}
# auto close issues with no response from author for N days
Expand Down
98 changes: 38 additions & 60 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: Release TubeSync

env:
IMAGE_NAME: tubesync
REGISTRY: ghcr.io

on:
release:
Expand All @@ -11,14 +12,16 @@ jobs:
info:
runs-on: ubuntu-latest
outputs:
ffmpeg-date: ${{ steps.jq.outputs.FFMPEG_DATE }}
ffmpeg-releases: ${{ steps.ffmpeg.outputs.releases }}
ffmpeg-version: ${{ steps.jq.outputs.FFMPEG_VERSION }}
IMAGE_NAME: ${{ env.IMAGE_NAME }}
REGISTRY: ${{ env.REGISTRY }}
ffmpeg-date: ${{ steps.ffmpeg.outputs.date }}
# ffmpeg-releases: ${{ steps.ffmpeg.outputs.releases }}
ffmpeg-version: ${{ steps.ffmpeg.outputs.version }}
lowercase-github-actor: ${{ steps.github-actor.outputs.lowercase }}
lowercase-github-repository_owner: ${{ steps.github-repository_owner.outputs.lowercase }}
tag: ${{ steps.tag.outputs.tag }}
ytdlp-latest-release: ${{ steps.yt-dlp.outputs.latest-release }}
ytdlp-releases: ${{ steps.yt-dlp.outputs.releases }}
# ytdlp-releases: ${{ steps.yt-dlp.outputs.releases }}
steps:
- uses: actions/checkout@v6
- name: Get tag
Expand All @@ -40,61 +43,36 @@ jobs:
- name: Retrieve yt-dlp/yt-dlp releases with GitHub CLI
id: yt-dlp
uses: ./.github/actions/yt-dlp
- name: Set outputs with jq
id: jq
run: |
cat >| .ffmpeg.releases.json <<'EOF'
${{ steps.ffmpeg.outputs.releases }}
EOF
mk_delim() { local f='%s_EOF_%d_' ; printf -- "${f}" "$1" "${RANDOM}" ; } ;
open_ml_var() { local f=''\%'s<<'\%'s\n' ; printf -- "${f}" "$2" "$1" ; } ;
close_ml_var() { local f='%s\n' ; printf -- "${f}" "$1" ; } ;
{
var='FFMPEG_DATE' ;
delim="$(mk_delim "${var}")" ;
open_ml_var "${delim}" "${var}" ;
jq_arg='[foreach .[] as $release ([{}, []]; [ .[0] + {($release.commit): ([ $release.date ] + (.[0][($release.commit)] // []) ) }, [ .[1][0] // $release.commit ] ] ; .[0][(.[1][0])] ) ][-1][0]' ;
jq -r "${jq_arg}" -- .ffmpeg.releases.json ;
close_ml_var "${delim}" "${var}" ;

ffmpeg_date="$( jq -r "${jq_arg}" -- .ffmpeg.releases.json )"

var='FFMPEG_VERSION' ;
delim="$(mk_delim "${var}")" ;
open_ml_var "${delim}" "${var}" ;
jq_arg='.[]|select(.date == $date)|.versions[]|select(startswith("N-"))' ;
jq -r --arg date "${ffmpeg_date}" "${jq_arg}" -- .ffmpeg.releases.json ;
close_ml_var "${delim}" "${var}" ;
unset -v delim jq_arg var ;
} >> "${GITHUB_OUTPUT}"
cat -v "${GITHUB_OUTPUT}"
rm -v -f .ffmpeg.releases.json

containerise:
docker-image:
concurrency:
group: ${{ github.repository }}-${{ github.workflow }}
cancel-in-progress: false
needs: ['info']
runs-on: ubuntu-latest
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log into GitHub Container Registry
env:
DOCKER_REGISTRY: https://ghcr.io
DOCKER_USERNAME: ${{ github.repository_owner }}
DOCKER_TOKEN: ${{ 'meeb' == github.repository_owner && secrets.REGISTRY_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
run: echo "${DOCKER_TOKEN}" | docker login --password-stdin --username "${DOCKER_USERNAME}" "${DOCKER_REGISTRY}"
- name: Build and push
uses: docker/build-push-action@v6
with:
platforms: linux/amd64,linux/arm64
push: true
tags: ghcr.io/${{ needs.info.outputs.lowercase-github-repository_owner }}/${{ env.IMAGE_NAME }}:${{ needs.info.outputs.tag }}
cache-from: |
type=registry,ref=ghcr.io/${{ needs.info.outputs.lowercase-github-repository_owner }}/${{ env.IMAGE_NAME }}:latest
type=gha
build-args: |
IMAGE_NAME=${{ env.IMAGE_NAME }}
FFMPEG_DATE=${{ needs.info.outputs.ffmpeg-date }}
FFMPEG_VERSION=${{ needs.info.outputs.ffmpeg-version }}
YTDLP_DATE=${{ fromJSON(needs.info.outputs.ytdlp-latest-release).tag.name }}
uses: docker/github-builder/.github/workflows/build.yml@v1
permissions:
contents: read # to fetch the repository content
id-token: write # for signing attestation(s) with GitHub OIDC Token
secrets:
registry-auths: |
- registry: ${{ needs.info.outputs.REGISTRY }}
username: ${{ github.repository_owner }}
password: ${{ 'meeb' == github.repository_owner && secrets.REGISTRY_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
with:
cache: false
# cache-mode: max
meta-images: ${{ needs.info.outputs.REGISTRY }}/${{ needs.info.outputs.lowercase-github-repository_owner }}/${{ needs.info.outputs.IMAGE_NAME }}
output: image
platforms: linux/amd64,linux/arm64
push: true
setup-qemu: false
meta-flavor: |
latest=false
meta-tags: |
type=raw,value=${{ needs.info.outputs.tag }}
type=ref,enable=false,event=tag
build-args: |
IMAGE_NAME=${{ needs.info.outputs.IMAGE_NAME }}
FFMPEG_DATE=${{ needs.info.outputs.ffmpeg-date }}
FFMPEG_VERSION=${{ needs.info.outputs.ffmpeg-version }}
YTDLP_DATE=${{ fromJSON(needs.info.outputs.ytdlp-latest-release).tag.name }}
11 changes: 9 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -146,5 +146,12 @@ Pipfile.lock
/tubesync/tasks/*.db-shm
/tubesync/tasks/*.db-wal

# Compiled CSS
/tubesync/common/static/styles/*.css
# Tailwind CLI binary (downloaded per platform)
/tailwindcss

# Generated requirements files (use `make requirements` to regenerate)
/requirements.txt
/requirements-dev.txt

# Compiled CSS output (generated by Tailwind CLI)
/tubesync/common/static/styles/tailwind/*-compiled.css
Loading