diff --git a/.github/workflows/docker-build-app.yml b/.github/workflows/docker-build-app.yml new file mode 100644 index 0000000..09f2153 --- /dev/null +++ b/.github/workflows/docker-build-app.yml @@ -0,0 +1,60 @@ +name: Build and Publish App Docker Image + +on: + push: + branches: + - main + - 'feature/**' + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/tuneperfect-app + +jobs: + build-and-push-app: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }} + type=ref,event=branch,enable=${{ github.ref != format('refs/heads/{0}', github.event.repository.default_branch) }} + type=sha,format=short + type=sha,format=long + type=semver,pattern={{version}},enable=${{ startsWith(github.ref, 'refs/tags/v') }} + type=semver,pattern={{major}},enable=${{ startsWith(github.ref, 'refs/tags/v') }} + type=semver,pattern={{major}}.{{minor}},enable=${{ startsWith(github.ref, 'refs/tags/v') }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: apps/app/Dockerfile + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + platforms: linux/amd64,linux/arm64 \ No newline at end of file diff --git a/.github/workflows/tauri-build-game.yml b/.github/workflows/tauri-build-game.yml index 4e8f35d..9b9e616 100644 --- a/.github/workflows/tauri-build-game.yml +++ b/.github/workflows/tauri-build-game.yml @@ -30,7 +30,7 @@ jobs: if: matrix.platform.os == 'ubuntu-22.04' run: | sudo apt-get update - sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libglib2.0-dev + sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libglib2.0-dev alsa-base alsa-utils - name: Setup Bun uses: oven-sh/setup-bun@v2 @@ -46,7 +46,7 @@ jobs: uses: swatinem/rust-cache@v2 with: workspaces: './apps/game/src-tauri -> target' - key: ${{ matrix.platform.target }} + key: ${{ matrix.platform.target }}-${{ matrix.platform.os }}-game - name: Install dependencies run: bun install diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index 7e6df22..b7d6da9 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -9,6 +9,7 @@ COPY ./package.json ./bun.lock ./turbo.json ./ RUN bun install RUN bun run build --filter @tuneperfect/api + FROM oven/bun:1 AS runner WORKDIR /usr/src/app diff --git a/apps/app/Dockerfile b/apps/app/Dockerfile new file mode 100644 index 0000000..f85b1ab --- /dev/null +++ b/apps/app/Dockerfile @@ -0,0 +1,33 @@ +FROM oven/bun:1 AS builder + +WORKDIR /usr/src/app + +COPY ./apps/api ./apps/api +COPY ./apps/app ./apps/app +COPY ./packages/email ./packages/email +COPY ./package.json ./bun.lock ./turbo.json ./ + +RUN bun install +RUN bun run build --filter @tuneperfect/app + + +FROM nginx:alpine AS runner + +RUN apk add --no-cache curl bash +RUN curl -fsSL https://bun.sh/install | bash +ENV BUN_INSTALL="/root/.bun" +ENV PATH="$BUN_INSTALL/bin:$PATH" + +WORKDIR /app +RUN bun install @import-meta-env/cli +COPY ./apps/app/.env.example ./ +COPY ./apps/app/docker/entrypoint.sh ./entrypoint.sh +RUN chmod +x ./entrypoint.sh + +WORKDIR /usr/share/nginx/html +COPY --from=builder /usr/src/app/apps/app/dist ./ +COPY ./apps/app/docker/nginx.conf /etc/nginx/conf.d/default.conf + +EXPOSE 80 + +CMD ["/app/entrypoint.sh"] \ No newline at end of file diff --git a/apps/app/docker/entrypoint.sh b/apps/app/docker/entrypoint.sh new file mode 100644 index 0000000..83b4243 --- /dev/null +++ b/apps/app/docker/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +bun --bun /app/node_modules/.bin/import-meta-env -x /app/.env.example -p /usr/share/nginx/html/index.html + +nginx -g "daemon off;" \ No newline at end of file diff --git a/apps/app/docker/nginx.conf b/apps/app/docker/nginx.conf new file mode 100644 index 0000000..eef7721 --- /dev/null +++ b/apps/app/docker/nginx.conf @@ -0,0 +1,12 @@ +server { + listen 80; + + server_name localhost; + + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri /index.html; + } +} \ No newline at end of file diff --git a/apps/app/index.html b/apps/app/index.html index 45b0ccc..ee41783 100644 --- a/apps/app/index.html +++ b/apps/app/index.html @@ -1,4 +1,4 @@ - +
@@ -6,6 +6,9 @@