mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-03 20:12:58 +00:00
6c448b336a
This commit implements a unified Docker deployment strategy, moving from separate frontend and backend images to a single, multi-stage build image containing both services. It also introduces a major reorganization of the frontend directory structure and simplifies the environment configuration. Key changes: - **Deployment**: Added a multi-stage `Dockerfile` and `docker-entrypoint.sh` to package the Go backend and Nginx-served frontend into a single container. - **CI/CD**: Updated GitHub Actions workflows (`ci-cd.yml`, `release.yml`) to build and push the new unified image instead of separate ones. - **Frontend Refactor**: Reorganized `frontend/src/pages` into a domain-driven directory structure (e.g., `auth/`, `admin/`, `content/`, `communication/`, `productivity/`, `settings/`, `misc/`). - **Configuration**: Simplified `.env.example` and updated `docker-compose.yml` to reflect the unified service model and single host port. - **Cleanup**: Removed deprecated `docker-compose.demo.yml`, `docker-compose.prod.yml`, and various unused frontend components and services. - **Backend**: Refactored configuration loading to use exported `GetDurationEnv` for better consistency.
164 lines
5.4 KiB
YAML
164 lines
5.4 KiB
YAML
name: Release and Deploy
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*' # Trigger on version tags like v1.2.5
|
|
workflow_dispatch: # Allow manual triggers
|
|
|
|
env:
|
|
REGISTRY: ghcr.io/dvorinka/trackeep
|
|
|
|
jobs:
|
|
extract-version:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
version: ${{ steps.version.outputs.version }}
|
|
is-prerelease: ${{ steps.version.outputs.is-prerelease }}
|
|
steps:
|
|
- name: Extract version from tag
|
|
id: version
|
|
run: |
|
|
# Extract version from git tag (remove 'v' prefix)
|
|
VERSION=${GITHUB_REF#refs/tags/v*}
|
|
VERSION=${VERSION#refs/tags/v}
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
|
|
# Check if this is a prerelease (contains - or alpha/beta/rc)
|
|
if [[ $VERSION == *-* ]] || [[ $VERSION == *alpha* ]] || [[ $VERSION == *beta* ]] || [[ $VERSION == *rc* ]]; then
|
|
echo "is-prerelease=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "is-prerelease=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
echo "🏷️ Version: $VERSION"
|
|
echo "🚀 Prerelease: ${{ steps.version.outputs.is-prerelease }}"
|
|
|
|
build-and-push:
|
|
needs: extract-version
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract metadata
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: ${{ env.REGISTRY }}
|
|
tags: |
|
|
type=ref,event=tag
|
|
type=semver,pattern={{version}}
|
|
type=raw,value=latest,enable={{isdefault_branch}}
|
|
labels: |
|
|
version=${{ needs.extract-version.outputs.version }}
|
|
build-date=${{ github.event.head_commit.timestamp }}
|
|
commit=${{ github.sha }}
|
|
prerelease=${{ needs.extract-version.outputs.is-prerelease }}
|
|
|
|
- name: Build and push unified image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
|
|
- name: Generate SBOM
|
|
uses: anchore/sbom-action@v0
|
|
with:
|
|
image: ${{ env.REGISTRY }}:${{ needs.extract-version.outputs.version }}
|
|
format: spdx-json
|
|
output-file: ./sbom.spdx.json
|
|
|
|
- name: Upload SBOM
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: sbom
|
|
path: ./sbom.spdx.json
|
|
|
|
create-github-release:
|
|
needs: [extract-version, build-and-push]
|
|
runs-on: ubuntu-latest
|
|
if: needs.extract-version.outputs.is-prerelease == 'false' # Only create releases for stable versions
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Create Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
name: Trackeep v${{ needs.extract-version.outputs.version }}
|
|
body: |
|
|
## 🚀 Trackeep v${{ needs.extract-version.outputs.version }}
|
|
|
|
### 🐳 Docker Image
|
|
- **Unified**: `ghcr.io/dvorinka/trackeep:${{ needs.extract-version.outputs.version }}`
|
|
- **Latest**: `ghcr.io/dvorinka/trackeep:latest`
|
|
|
|
### 📋 Changes
|
|
${{ github.event.head_commit.message }}
|
|
|
|
### 🔧 Installation
|
|
```bash
|
|
# Deploy with docker compose
|
|
docker compose up -d
|
|
```
|
|
|
|
### ⚡ Auto-Updates
|
|
The application includes a built-in update system that:
|
|
- ✅ Automatically checks for updates every 24 hours
|
|
- ✅ Shows update notifications in the left navigation
|
|
- ✅ One-click installation from the UI
|
|
- ✅ No authentication or setup required
|
|
|
|
draft: false
|
|
prerelease: ${{ needs.extract-version.outputs.is-prerelease }}
|
|
files: sbom.spdx.json
|
|
generate_release_notes: true
|
|
|
|
update-version-files:
|
|
needs: extract-version
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Update version in all files
|
|
run: |
|
|
VERSION="${{ needs.extract-version.outputs.version }}"
|
|
echo "🏷️ Updating all version files to $VERSION"
|
|
|
|
# Update frontend package.json
|
|
if [ -f "frontend/package.json" ]; then
|
|
echo "📝 Updating frontend/package.json..."
|
|
sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" frontend/package.json
|
|
echo "✅ Frontend updated to $VERSION"
|
|
fi
|
|
|
|
# Update backend go.mod
|
|
if [ -f "backend/go.mod" ]; then
|
|
echo "📝 Updating backend/go.mod..."
|
|
sed -i "s/go [^\"]*\"/go $VERSION/" backend/go.mod
|
|
echo "✅ Backend updated to $VERSION"
|
|
fi
|
|
|
|
echo "🎉 All version files updated to $VERSION"
|
|
|
|
- name: Commit updated version files
|
|
run: |
|
|
git config user.name "github-actions[bot]"
|
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
git add .
|
|
git commit -m "chore: Update version to ${{ needs.extract-version.outputs.version }}"
|
|
git push
|