Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
63 changes: 63 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Python
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
*.so
*.egg
*.egg-info/
dist/
build/

# Virtual Environment
.venv/
venv/
ENV/
env/

# Testing
.pytest_cache/
.coverage
htmlcov/
.tox/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# Git
.git/
.gitignore
.github/

# Environment
# .env enthält lokale Konfiguration (Secrets) und darf NICHT committed werden
.env.local
.env.*.local

# Backup files
*.backup*
*.bak
*.bak[0-9]
*.backup_*

# Logs (werden als Volume gemountet)
logs/

# Data (wird als Volume gemountet)
data/filamenthub.db
data/backups/

# Documentation
docs/
*.md
!README.md

# Temporary files
temp_*
tmp_*
nul
10 changes: 10 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# FilamentHub Environment Configuration
#
# WICHTIG: Dieser Hash ist ein FAKE-PLATZHALTER und funktioniert NICHT zum Einloggen!
#
# Für normale Nutzer: Der Admin-Bereich ist NICHT erforderlich - die App funktioniert vollständig ohne!
# Für Entwickler: Verwenden Sie Ihre separate .env Datei mit dem echten Admin-Hash.
# Admin-Zugang wird nur auf Anfrage beim Entwickler vergeben.

ADMIN_PASSWORD_HASH=$2b$12$L5hUkHdH.NH6CeC6FiH0o.lpnNpRA3zaAho6QyerwP3ZQF19xqmmq
ADMIN_COOKIE_SECURE=false
18 changes: 18 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Ensure shell scripts always use LF line endings (Unix style)
*.sh text eol=lf

# Python files
*.py text eol=lf

# Config files
*.yaml text eol=lf
*.yml text eol=lf
*.json text eol=lf
*.ini text eol=lf

# Markdown
*.md text eol=lf

# Docker files
Dockerfile text eol=lf
docker-compose.yml text eol=lf
53 changes: 53 additions & 0 deletions .github/workflows/cleanup-beta-releases.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Cleanup old beta releases

on:
workflow_dispatch:
push:
branches:
- beta

jobs:
cleanup:
runs-on: ubuntu-latest

steps:
- name: Delete old beta releases (keep last 5)
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const owner = context.repo.owner;
const repo = context.repo.repo;
const keep = 5;

const releases = await github.paginate(
github.rest.repos.listReleases,
{ owner, repo }
);

const betaReleases = releases
.filter(r => r.prerelease)
.sort((a, b) => new Date(b.created_at) - new Date(a.created_at));

const toDelete = betaReleases.slice(keep);

console.log(`Found ${betaReleases.length} beta releases`);
console.log(`Keeping ${keep}, deleting ${toDelete.length}`);

for (const release of toDelete) {
console.log(`Deleting beta release: ${release.tag_name}`);

await github.rest.repos.deleteRelease({
owner,
repo,
release_id: release.id,
});

await github.rest.git.deleteRef({
owner,
repo,
ref: `tags/${release.tag_name}`,
}).catch(() => {
console.log(`Tag ${release.tag_name} already removed`);
});
}
87 changes: 55 additions & 32 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ on:
push:
branches:
- main
- beta
paths:
# Build-relevanter Code
- "app/**"
- "services/**"
- "backend/**"
Expand All @@ -16,7 +16,6 @@ on:
- "Dockerfile"
- "entrypoint.sh"
- "run.py"
# Version steuert Release
- "config.yaml"

workflow_dispatch:
Expand All @@ -27,46 +26,63 @@ jobs:

steps:
# ------------------------------------------------------------
# 1. Checkout (volle Historie für Tags & Changelog)
# 1. Checkout
# ------------------------------------------------------------
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

# ------------------------------------------------------------
# 2. Aktuelle Version aus config.yaml lesen (Python/YAML)
# 2. Version aus config.yaml lesen
# ------------------------------------------------------------
- name: Read current version
id: version
run: |
ver=$(python - << 'EOF'
import yaml
with open("config.yaml") as f:
cfg = yaml.safe_load(f)
print(cfg["app"]["version"])
print(yaml.safe_load(f)["app"]["version"])
EOF
)
echo "version=$ver" >> $GITHUB_OUTPUT

# ------------------------------------------------------------
# 3. Alte Version aus main vergleichen
# 3. Channel bestimmen (main = stable, beta = prerelease)
# ------------------------------------------------------------
- name: Detect channel
id: channel
run: |
if [ "${GITHUB_REF##*/}" = "beta" ]; then
echo "channel=beta" >> $GITHUB_OUTPUT
echo "docker_main_tag=beta" >> $GITHUB_OUTPUT
echo "docker_version_tag=${{ steps.version.outputs.version }}-beta" >> $GITHUB_OUTPUT
echo "suffix=-beta" >> $GITHUB_OUTPUT
echo "prerelease=true" >> $GITHUB_OUTPUT
else
echo "channel=stable" >> $GITHUB_OUTPUT
echo "docker_main_tag=latest" >> $GITHUB_OUTPUT
echo "docker_version_tag=${{ steps.version.outputs.version }}" >> $GITHUB_OUTPUT
echo "suffix=" >> $GITHUB_OUTPUT
echo "prerelease=false" >> $GITHUB_OUTPUT
fi

# ------------------------------------------------------------
# 4. Versionsvergleich (NUR stable)
# ------------------------------------------------------------
- name: Read previous version from main
if: ${{ steps.channel.outputs.channel == 'stable' }}
id: oldversion
run: |
old_ver=$(git show origin/main:config.yaml | python - << 'EOF'
import sys, yaml
cfg = yaml.safe_load(sys.stdin)
print(cfg["app"]["version"])
print(yaml.safe_load(sys.stdin)["app"]["version"])
EOF
)
echo "old=$old_ver" >> $GITHUB_OUTPUT

# ------------------------------------------------------------
# 4. Versionsänderung prüfen
# ------------------------------------------------------------
- name: Check version change
- name: Check version change (stable only)
if: ${{ steps.channel.outputs.channel == 'stable' }}
id: version_changed
run: |
if [ "${{ steps.version.outputs.version }}" = "${{ steps.oldversion.outputs.old }}" ]; then
Expand All @@ -75,19 +91,17 @@ jobs:
echo "changed=true" >> $GITHUB_OUTPUT
fi

# ------------------------------------------------------------
# 5. Abbruch wenn kein Versionssprung
# ------------------------------------------------------------
- name: Skip if no version bump
if: ${{ steps.version_changed.outputs.changed == 'false' }}
- name: Skip if no version bump (stable only)
if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'false' }}
run: |
echo "Kein Versionssprung – kein Build, kein Release."
echo "Kein Versionssprung – Stable Build übersprungen."
exit 0

# ------------------------------------------------------------
# 6. Git-Tag setzen (fehlertolerant)
# 5. Git Tag (NUR stable)
# ------------------------------------------------------------
- name: Create Git tag
- name: Create Git tag (stable only)
if: ${{ steps.channel.outputs.channel == 'stable' }}
run: |
git tag v${{ steps.version.outputs.version }} || echo "Tag existiert bereits"
git push origin v${{ steps.version.outputs.version }} || true
Expand All @@ -96,9 +110,10 @@ jobs:
run: sleep 3

# ------------------------------------------------------------
# 7. Changelog DE
# 6. Changelog DE (NUR stable)
# ------------------------------------------------------------
- name: Generate Changelog (DE)
if: ${{ steps.channel.outputs.prerelease == 'false' }}
id: changelog_de
uses: mikepenz/release-changelog-builder-action@v4
with:
Expand All @@ -107,24 +122,28 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Write CHANGELOG.md
if: ${{ steps.channel.outputs.prerelease == 'false' }}
run: echo "${{ steps.changelog_de.outputs.changelog }}" > CHANGELOG.md

- name: Commit CHANGELOG.md
if: ${{ steps.channel.outputs.prerelease == 'false' }}
run: |
git config user.name "github-actions"
git config user.email "github-actions@github.com"
git add CHANGELOG.md
git commit -m "Update CHANGELOG for v${{ steps.version.outputs.version }}" || echo "No changes"

- name: Push CHANGELOG.md
if: ${{ steps.channel.outputs.prerelease == 'false' }}
uses: ad-m/github-push-action@v0.8.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}

# ------------------------------------------------------------
# 8. Changelog EN
# 7. Changelog EN (NUR stable)
# ------------------------------------------------------------
- name: Generate Changelog (EN)
if: ${{ steps.channel.outputs.prerelease == 'false' }}
id: changelog_en
uses: mikepenz/release-changelog-builder-action@v4
with:
Expand All @@ -133,20 +152,23 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Write CHANGELOG_EN.md
if: ${{ steps.channel.outputs.prerelease == 'false' }}
run: echo "${{ steps.changelog_en.outputs.changelog }}" > CHANGELOG_EN.md

- name: Commit CHANGELOG_EN.md
if: ${{ steps.channel.outputs.prerelease == 'false' }}
run: |
git add CHANGELOG_EN.md
git commit -m "Update CHANGELOG_EN for v${{ steps.version.outputs.version }}" || echo "No changes"

- name: Push CHANGELOG_EN.md
if: ${{ steps.channel.outputs.prerelease == 'false' }}
uses: ad-m/github-push-action@v0.8.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}

# ------------------------------------------------------------
# 9. Docker Build Vorbereitung
# 8. Docker Setup
# ------------------------------------------------------------
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
Expand All @@ -161,7 +183,7 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}

# ------------------------------------------------------------
# 10. Docker Image bauen & pushen (Multi-Arch)
# 9. Docker Build & Push
# ------------------------------------------------------------
- name: Build & Push Docker Image
uses: docker/build-push-action@v5
Expand All @@ -170,25 +192,26 @@ jobs:
platforms: linux/amd64,linux/arm64
push: true
tags: |
d3nn3s/filamenthub:latest
d3nn3s/filamenthub:${{ steps.version.outputs.version }}
d3nn3s/filamenthub:${{ steps.channel.outputs.docker_main_tag }}
d3nn3s/filamenthub:${{ steps.channel.outputs.docker_version_tag }}
d3nn3s/filamenthub:sha-${{ github.sha }}

# ------------------------------------------------------------
# 11. GitHub Release (DE + EN)
# 10. GitHub Release (stable + beta)
# ------------------------------------------------------------
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ steps.version.outputs.version }}
name: FilamentHub v${{ steps.version.outputs.version }}
tag_name: v${{ steps.version.outputs.version }}${{ steps.channel.outputs.suffix }}
name: FilamentHub v${{ steps.version.outputs.version }}${{ steps.channel.outputs.suffix }}
prerelease: ${{ steps.channel.outputs.prerelease }}
body: |
## 🇩🇪 Deutsch
${{ steps.changelog_de.outputs.changelog }}
${{ steps.changelog_de.outputs.changelog || 'Beta Release – kein finaler Changelog.' }}

---

## 🇬🇧 English
${{ steps.changelog_en.outputs.changelog }}
${{ steps.changelog_en.outputs.changelog || 'Beta release – no final changelog.' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Loading