add backend
Build and Deploy / build-and-deploy (push) Failing after 5m26s

This commit is contained in:
2026-05-03 20:58:09 +02:00
parent f3dfdb2f90
commit d9e3f398b8
8 changed files with 3722 additions and 484 deletions
+17 -3
View File
@@ -29,16 +29,27 @@ jobs:
username: ${{ gitea.actor }} username: ${{ gitea.actor }}
password: ${{ secrets.CI_TOKEN }} password: ${{ secrets.CI_TOKEN }}
- name: Build and push Docker image - name: Build and push frontend image
uses: docker/build-push-action@v5 uses: docker/build-push-action@v5
with: with:
context: . context: .
target: frontend
push: true push: true
tags: | tags: |
${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}:${{ steps.tag.outputs.sha }} ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}:${{ steps.tag.outputs.sha }}
${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}:latest ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}:latest
- name: Update image tag in gitops repo - name: Build and push backend image
uses: docker/build-push-action@v5
with:
context: .
target: backend
push: true
tags: |
${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}-tina:${{ steps.tag.outputs.sha }}
${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}-tina:latest
- name: Update image tags in gitops repo
env: env:
CI_TOKEN: ${{ secrets.CI_TOKEN }} CI_TOKEN: ${{ secrets.CI_TOKEN }}
SHA: ${{ steps.tag.outputs.sha }} SHA: ${{ steps.tag.outputs.sha }}
@@ -52,7 +63,10 @@ jobs:
sed -i \ sed -i \
"s|image: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}:.*|image: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}:${SHA}|" \ "s|image: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}:.*|image: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}:${SHA}|" \
"apps/${{ env.APP }}/deployment.yaml" "apps/${{ env.APP }}/deployment.yaml"
git add "apps/${{ env.APP }}/deployment.yaml" sed -i \
"s|image: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}-tina:.*|image: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.APP }}-tina:${SHA}|" \
"apps/${{ env.APP }}/tina-backend-deployment.yaml"
git add "apps/${{ env.APP }}/deployment.yaml" "apps/${{ env.APP }}/tina-backend-deployment.yaml"
git diff --cached --quiet && echo "No changes, skipping commit." && exit 0 git diff --cached --quiet && echo "No changes, skipping commit." && exit 0
git commit -m "ci: update ${{ env.APP }} to ${SHA}" git commit -m "ci: update ${{ env.APP }} to ${SHA}"
git push origin main git push origin main
+17 -10
View File
@@ -1,19 +1,26 @@
# Shared build: generates /dist (Astro site + admin SPA) and tina/__generated__
FROM node:20-alpine AS builder FROM node:20-alpine AS builder
WORKDIR /app WORKDIR /app
COPY package*.json ./
COPY package.json package-lock.json ./ RUN npm ci --legacy-peer-deps
RUN npm ci
COPY . . COPY . .
RUN npm run build ENV TINA_PUBLIC_IS_LOCAL=true
RUN npm run build:tina
FROM nginx:alpine
# Frontend: Nginx serving the static site + TinaCMS admin SPA
FROM nginx:alpine AS frontend
RUN rm /etc/nginx/conf.d/default.conf RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/dist /usr/share/nginx/html COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80 EXPOSE 80
CMD ["nginx", "-g", "daemon off;"] # Backend: TinaCMS self-hosted API server
FROM node:20-alpine AS backend
WORKDIR /app
COPY package*.json ./
RUN npm ci --legacy-peer-deps --omit=dev
COPY backend/ ./backend/
COPY --from=builder /app/tina/__generated__ ./tina/__generated__
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "backend/index.js"]
+50
View File
@@ -0,0 +1,50 @@
import express from 'express'
import { TinaNodeBackend, LocalBackendAuthProvider, createDatabase, createLocalDatabase } from '@tinacms/datalayer'
import { AuthJsBackendAuthProvider, TinaAuthJSOptions } from 'tinacms-authjs'
import { MongodbLevel } from 'mongodb-level'
import { GitHubProvider } from 'tinacms-gitprovider-github'
const isLocal = process.env.TINA_PUBLIC_IS_LOCAL === 'true'
const branch = process.env.GITEA_BRANCH || 'main'
const databaseClient = isLocal
? createLocalDatabase()
: createDatabase({
gitProvider: new GitHubProvider({
branch,
owner: process.env.GITEA_OWNER,
repo: process.env.GITEA_REPO,
token: process.env.GITEA_TOKEN,
octokitOptions: {
baseUrl: 'https://git.idealconnected.com/api/v1',
},
}),
databaseAdapter: new MongodbLevel({
collectionName: 'tinacms',
dbName: 'tinacms',
mongoUri: process.env.MONGODB_URI,
}),
})
const authProvider = isLocal
? LocalBackendAuthProvider()
: AuthJsBackendAuthProvider({
authOptions: TinaAuthJSOptions({
databaseClient,
secret: process.env.NEXTAUTH_SECRET,
}),
})
const tinaHandler = TinaNodeBackend({
authProvider,
databaseClient,
})
const app = express()
app.use(express.json())
// Mount at root — TinaNodeBackend routes /api/tina/* internally
app.all('*', (req, res) => tinaHandler(req, res))
const port = process.env.PORT || 3000
app.listen(port, () => console.log(`Tina backend running on port ${port}`))
+10
View File
@@ -0,0 +1,10 @@
{
"users": [
{
"name": "Admin",
"email": "admin@theater-jb.ch",
"username": "admin",
"password": "changeme"
}
]
}
+3590 -466
View File
File diff suppressed because it is too large Load Diff
+8 -1
View File
@@ -13,8 +13,15 @@
"@astrojs/mdx": "^4.3.13", "@astrojs/mdx": "^4.3.13",
"@tailwindcss/vite": "^4.2.4", "@tailwindcss/vite": "^4.2.4",
"@tinacms/cli": "^2.1.2", "@tinacms/cli": "^2.1.2",
"@tinacms/datalayer": "^2.0.18",
"astro": "^5.16.16", "astro": "^5.16.16",
"express": "^4.19.0",
"mongodb-level": "^0.0.4",
"next": "^14.2.0",
"next-auth": "^4.24.7",
"tailwindcss": "^4.2.4", "tailwindcss": "^4.2.4",
"tinacms": "^3.3.2" "tinacms": "^3.3.2",
"tinacms-authjs": "^21.0.5",
"tinacms-gitprovider-github": "^4.1.5"
} }
} }
+4 -4
View File
@@ -1,10 +1,9 @@
import { defineConfig } from "tinacms"; import { defineConfig } from "tinacms";
import { UsernamePasswordAuthJSProvider, TinaUserCollection } from "tinacms-authjs/dist/tinacms";
// Your TinaCMS configuration
export default defineConfig({ export default defineConfig({
branch: process.env.TINA_BRANCH || "main", contentApiUrlOverride: "/api/tina/gql",
clientId: process.env.TINA_CLIENT_ID || "", authProvider: new UsernamePasswordAuthJSProvider(),
token: process.env.TINA_TOKEN || "",
build: { build: {
outputFolder: "admin", outputFolder: "admin",
@@ -19,6 +18,7 @@ export default defineConfig({
}, },
schema: { schema: {
collections: [ collections: [
TinaUserCollection,
{ {
name: "post", name: "post",
label: "Blog Posts", label: "Blog Posts",
+26
View File
@@ -0,0 +1,26 @@
import { createDatabase, createLocalDatabase } from '@tinacms/datalayer'
import { MongodbLevel } from 'mongodb-level'
import { GitHubProvider } from 'tinacms-gitprovider-github'
const isLocal = process.env.TINA_PUBLIC_IS_LOCAL === 'true'
const branch = process.env.GITEA_BRANCH || 'main'
export default isLocal
? createLocalDatabase()
: createDatabase({
gitProvider: new GitHubProvider({
branch,
owner: process.env.GITEA_OWNER!,
repo: process.env.GITEA_REPO!,
token: process.env.GITEA_TOKEN!,
octokitOptions: {
// Gitea's GitHub-compatible API
baseUrl: 'https://git.idealconnected.com/api/v1',
},
}),
databaseAdapter: new MongodbLevel({
collectionName: 'tinacms',
dbName: 'tinacms',
mongoUri: process.env.MONGODB_URI!,
}),
})