8 Commits

Author SHA1 Message Date
0db3b40a40 bypass requirement for nsfw model
Some checks failed
release server / resolve build metadata (push) Successful in 6s
release server / build fluxer server (push) Successful in 3m36s
release server / create release (disabled for Gitea) (push) Has been skipped
release server / release summary (push) Successful in 5s
test cassandra-backup / Test latest Cassandra backup (push) Has been cancelled
2026-03-01 19:44:20 -05:00
3a8b09e47e fix(docker): reinstall dependencies in build stage
Some checks failed
release server / resolve build metadata (push) Successful in 6s
release server / build fluxer server (push) Successful in 3m25s
release server / create release (disabled for Gitea) (push) Has been skipped
release server / release summary (push) Successful in 5s
test cassandra-backup / Test latest Cassandra backup (push) Has been cancelled
The build stage needs to run pnpm install after copying packages
to ensure all dependencies like ioredis are properly resolved.
2026-03-01 13:45:22 -05:00
f327b05bce fix(ci): disable GitHub release creation for Gitea
All checks were successful
release server / resolve build metadata (push) Successful in 14s
release server / build fluxer server (push) Successful in 7m50s
release server / create release (disabled for Gitea) (push) Has been skipped
release server / release summary (push) Successful in 5s
GitHub release API (softprops/action-gh-release) doesn't work on Gitea.
Disabled the create-release job with if: false.
2026-03-01 13:28:53 -05:00
8e1b609346 perf(ci): build only for linux/amd64 platform
Some checks failed
release server / resolve build metadata (push) Successful in 8s
release server / build fluxer server (push) Successful in 4m59s
release server / release summary (push) Successful in 6s
release server / create release (push) Failing after 10s
Removed arm64 build to speed up CI - only deploying to amd64 servers.
This cuts build time roughly in half.
2026-03-01 13:18:00 -05:00
5572256b6b fix(docker): correct package name in ENTRYPOINT
Some checks failed
release server / resolve build metadata (push) Successful in 10s
release server / create release (push) Has been cancelled
release server / release summary (push) Has been cancelled
release server / build fluxer server (push) Has been cancelled
The package is named 'fluxer_server' not '@fluxer/server'.
This was causing 'No projects matched the filters' error at runtime.
2026-03-01 13:14:45 -05:00
fe77148fe0 fix(docker): update pnpm version to match package.json
package.json specifies pnpm@10.29.3 but Dockerfile was using 10.26.0,
causing corepack to try downloading the correct version at runtime.
2026-03-01 13:13:28 -05:00
f7dd8b24f4 fix(ci): disable GitHub Actions cache and attestation for Gitea
Some checks failed
release server / resolve build metadata (push) Successful in 6s
release server / create release (push) Has been cancelled
release server / release summary (push) Has been cancelled
release server / build fluxer server (push) Has been cancelled
The GHA cache and attestation features don't exist in Gitea and were
causing the workflow to timeout/fail even though the build succeeded.
Disabled these GitHub-specific features.
2026-03-01 13:09:34 -05:00
84ec7653d2 docs: document successful Docker build
Successfully built fluxer-server image for both amd64 and arm64.
Image pushed to Gitea container registry with multiple tags.
All critical patches from third-party guide applied.
2026-03-01 12:55:08 -05:00
4 changed files with 54 additions and 25 deletions

View File

@@ -146,7 +146,7 @@ jobs:
with:
context: .
file: fluxer_server/Dockerfile
platforms: linux/amd64,linux/arm64
platforms: linux/amd64
push: true
tags: ${{ steps.docker_meta.outputs.tags }}
labels: |
@@ -165,25 +165,25 @@ jobs:
BUILD_NUMBER=${{ needs.meta.outputs.build_number }}
BUILD_TIMESTAMP=${{ needs.meta.outputs.timestamp }}
RELEASE_CHANNEL=${{ needs.meta.outputs.channel }}
cache-from: type=gha,scope=server-${{ needs.meta.outputs.channel }}
cache-to: type=gha,mode=max,scope=server-${{ needs.meta.outputs.channel }}
provenance: true
sbom: true
# GitHub Actions cache not available in Gitea - disabled
# cache-from: type=gha,scope=server-${{ needs.meta.outputs.channel }}
# cache-to: type=gha,mode=max,scope=server-${{ needs.meta.outputs.channel }}
provenance: false
sbom: false
- name: attest
uses: actions/attest-build-provenance@v2
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_SERVER }}
subject-digest: ${{ steps.build.outputs.digest }}
push-to-registry: true
# GitHub-specific attestation - not available in Gitea
# - name: attest
# uses: actions/attest-build-provenance@v2
# with:
# subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_SERVER }}
# subject-digest: ${{ steps.build.outputs.digest }}
# push-to-registry: true
create-release:
name: create release
name: create release (disabled for Gitea)
needs: [meta, build-server]
if: |
always() &&
needs.meta.outputs.version != '' &&
(needs.build-server.result == 'success' || needs.build-server.result == 'skipped')
# GitHub release API doesn't exist in Gitea - disabled
if: false
runs-on: ubuntu-latest
timeout-minutes: 25
steps:

View File

@@ -75,15 +75,34 @@ Gitea registry format is typically:
If the registry requires a different format, check your Gitea container registry settings.
## Docker Build Fixes Applied
Successfully built fluxer-server Docker image! Fixes applied:
1. ✅ Fixed package path (app → app_proxy)
2. ✅ Added Rust/WASM toolchain for frontend
3. ✅ Added ca-certificates
4. ✅ Fixed .dockerignore (locale files, emoji data, build scripts)
5. ✅ Set FLUXER_CONFIG environment variable
6. ✅ Updated ENTRYPOINT to target @fluxer/server
7. ✅ Removed redundant typecheck step
8. ✅ Generated locale files before build (lingui:compile)
9. ✅ Reinstalled dependencies after copying source
10. ✅ Allowed scripts/build directory in .dockerignore
**Built image tags:**
- `git.i5.wtf/fluxerapp/fluxer-server:nightly`
- `git.i5.wtf/fluxerapp/fluxer-server:nightly-20260301`
- `git.i5.wtf/fluxer-server:sha-2e9010d`
## TODO
- [x] Modify GitHub Actions workflows for Gitea compatibility
- [ ] Fix container registry authentication
- [ ] Apply patches from third-party guide (if needed)
- [x] Fix container registry authentication
- [x] Apply patches from third-party guide
- [x] Build Docker image
- [ ] Configure for uwu.lc domain
- [ ] Test CI on Gitea instance
- [ ] Build Docker image
- [ ] Deploy to production
- [ ] Set up backing services (Valkey, NATS, Meilisearch, LiveKit)
## Resources

View File

@@ -7,7 +7,7 @@ FROM node:24-trixie-slim AS base
WORKDIR /usr/src/app
RUN corepack enable && corepack prepare pnpm@10.26.0 --activate
RUN corepack enable && corepack prepare pnpm@10.29.3 --activate
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
@@ -69,9 +69,13 @@ FROM deps AS build
COPY tsconfigs /usr/src/app/tsconfigs
COPY packages/ ./packages/
RUN pnpm --filter @fluxer/config generate
COPY fluxer_server/ ./fluxer_server/
# Reinstall to ensure all dependencies are properly linked after copying source
RUN pnpm install --frozen-lockfile
RUN pnpm --filter @fluxer/config generate
RUN pnpm --filter @fluxer/marketing build:css
COPY fluxer_media_proxy/data/model.onnx ./fluxer_media_proxy/data/model.onnx
@@ -156,7 +160,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
RUN corepack enable && corepack prepare pnpm@10.26.0 --activate
RUN corepack enable && corepack prepare pnpm@10.29.3 --activate
COPY --from=build /usr/src/app/node_modules ./node_modules
COPY --from=build /usr/src/app/packages ./packages
@@ -214,4 +218,4 @@ HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:8080/_health || exit 1
# Target the fluxer_server package specifically
ENTRYPOINT ["pnpm", "--filter", "@fluxer/server", "start"]
ENTRYPOINT ["pnpm", "--filter", "fluxer_server", "start"]

View File

@@ -49,6 +49,12 @@ export class NSFWDetectionService {
}
async initialize(): Promise<void> {
try {
await fs.access(this.modelPath);
} catch {
this.session = null;
return;
}
const modelBuffer = await fs.readFile(this.modelPath);
this.session = await ort.InferenceSession.create(modelBuffer);
}
@@ -60,7 +66,7 @@ export class NSFWDetectionService {
async checkNSFWBuffer(buffer: Buffer): Promise<NSFWCheckResult> {
if (!this.session) {
throw new Error('NSFW Detection service not initialized');
return {isNSFW: false, probability: 0};
}
const processedImage = await this.preprocessImage(buffer);