diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml new file mode 100644 index 0000000..1862a1e --- /dev/null +++ b/.gitea/workflows/release.yaml @@ -0,0 +1,53 @@ +name: ci + +on: + push: + branches: + - main + - staging + tags: + - '*' + +jobs: + docker: + runs-on: ubuntu-latest + strategy: + matrix: + include: + - service: frontend + context: frontend + dockerfile: frontend/Dockerfile + - service: backend + context: backend + dockerfile: backend/Dockerfile + + steps: + - name: Checkout with submodules + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Login to Docker Registry + uses: docker/login-action@v2 + with: + registry: ${{ vars.REGISTRY_URL }} + username: ${{ vars.REGISTRY_USER }} + password: ${{ secrets.REGISTRY_PASSWORD }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver: remote + endpoint: ${{ env.BUILDKIT_ARM64_ENDPOINT }} + + - name: Build and Push ${{ matrix.service }} Image + uses: docker/build-push-action@v6 + with: + context: ${{ matrix.context }} + file: ${{ matrix.dockerfile }} + platforms: linux/arm64 + push: true + provenance: false + tags: | + ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}-${{ matrix.service }}:${{ gitea.ref_type == 'tag' && gitea.ref_name || (gitea.ref_name == 'main' && 'latest' || gitea.ref_name) }} + ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}-${{ matrix.service }}:${{ gitea.sha }} diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 46d76d7..88d5b52 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -593,6 +593,47 @@ dependencies = [ "tower-service", ] +[[package]] +name = "backend" +version = "0.1.0" +dependencies = [ + "anyhow", + "argon2", + "async-trait", + "aws-config", + "aws-credential-types", + "aws-sdk-s3", + "axum", + "axum-extra", + "bytes", + "chrono", + "diesel", + "diesel_migrations", + "dotenv", + "hex", + "http-body-util", + "hyper 1.7.0", + "image", + "jsonwebtoken", + "mime_guess", + "once_cell", + "pdfium-render", + "percent-encoding", + "rand 0.8.5", + "reqwest", + "serde", + "serde_json", + "sha2", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tower 0.4.13", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "uuid", +] + [[package]] name = "backtrace" version = "0.3.76" @@ -2107,47 +2148,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "papercrate-backend" -version = "0.1.0" -dependencies = [ - "anyhow", - "argon2", - "async-trait", - "aws-config", - "aws-credential-types", - "aws-sdk-s3", - "axum", - "axum-extra", - "bytes", - "chrono", - "diesel", - "diesel_migrations", - "dotenv", - "hex", - "http-body-util", - "hyper 1.7.0", - "image", - "jsonwebtoken", - "mime_guess", - "once_cell", - "pdfium-render", - "percent-encoding", - "rand 0.8.5", - "reqwest", - "serde", - "serde_json", - "sha2", - "tempfile", - "thiserror 1.0.69", - "tokio", - "tower 0.4.13", - "tower-http 0.5.2", - "tracing", - "tracing-subscriber", - "uuid", -] - [[package]] name = "parking_lot" version = "0.12.5" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 1e873f2..f395f8d 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "papercrate-backend" +name = "backend" version = "0.1.0" edition = "2021" diff --git a/backend/Dockerfile b/backend/Dockerfile index 1cad2b1..5d54cf8 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -19,7 +19,7 @@ COPY migrations ./migrations COPY tests ./tests COPY diesel.toml ./ -RUN cargo build --release --bin papercrate-backend --bin worker +RUN cargo build --release --bin backend --bin worker RUN cargo install diesel_cli --no-default-features --features postgres FROM debian:bookworm-slim AS runtime @@ -35,7 +35,7 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* \ && useradd --system --create-home --uid 10001 appuser -COPY --from=builder /app/target/release/papercrate-backend /usr/local/bin/papercrate-backend +COPY --from=builder /app/target/release/backend /usr/local/bin/papercrate-backend COPY --from=builder /app/target/release/worker /usr/local/bin/papercrate-worker COPY --from=builder /usr/local/cargo/bin/diesel /usr/local/bin/diesel COPY migrations ./migrations diff --git a/backend/src/bin/maintenance.rs b/backend/src/bin/maintenance.rs index a3254cf..679f12e 100644 --- a/backend/src/bin/maintenance.rs +++ b/backend/src/bin/maintenance.rs @@ -3,7 +3,7 @@ use std::env; use anyhow::{Context, Result}; use diesel::prelude::*; -use papercrate_backend::{ +use backend::{ config::AppConfig, db, models::DocumentAsset, diff --git a/backend/src/bin/worker.rs b/backend/src/bin/worker.rs index 64558da..8488083 100644 --- a/backend/src/bin/worker.rs +++ b/backend/src/bin/worker.rs @@ -3,7 +3,7 @@ use std::{sync::Arc, time::Duration}; use tokio::signal; use tracing_subscriber::EnvFilter; -use papercrate_backend::{ +use backend::{ auth::jwt::JwtService, config::AppConfig, db, default_handlers, s3::build_client, state::AppState, storage::S3Storage, Worker, }; diff --git a/backend/src/main.rs b/backend/src/main.rs index a9df5de..eb60155 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -5,13 +5,13 @@ use tokio::net::TcpListener; use tower::make::Shared; use tracing_subscriber::EnvFilter; -use papercrate_backend::auth::jwt::JwtService; -use papercrate_backend::config::AppConfig; -use papercrate_backend::db; -use papercrate_backend::routes; -use papercrate_backend::s3::build_client; -use papercrate_backend::state::AppState; -use papercrate_backend::storage::S3Storage; +use backend::auth::jwt::JwtService; +use backend::config::AppConfig; +use backend::db; +use backend::routes; +use backend::s3::build_client; +use backend::state::AppState; +use backend::storage::S3Storage; #[tokio::main] async fn main() -> anyhow::Result<()> { diff --git a/backend/tests/common/mod.rs b/backend/tests/common/mod.rs index 1063aec..efd9a8b 100644 --- a/backend/tests/common/mod.rs +++ b/backend/tests/common/mod.rs @@ -14,13 +14,13 @@ use diesel::PgConnection; use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; use http_body_util::BodyExt; use once_cell::sync::Lazy; -use papercrate_backend::auth::jwt::JwtService; -use papercrate_backend::config::AppConfig; -use papercrate_backend::db::{self, PgPool}; -use papercrate_backend::models::{Job, NewUser}; -use papercrate_backend::routes; -use papercrate_backend::state::AppState; -use papercrate_backend::storage::ObjectStorage; +use backend::auth::jwt::JwtService; +use backend::config::AppConfig; +use backend::db::{self, PgPool}; +use backend::models::{Job, NewUser}; +use backend::routes; +use backend::state::AppState; +use backend::storage::ObjectStorage; use rand::rngs::OsRng; use serde::Serialize; use tokio::sync::Mutex; @@ -183,7 +183,7 @@ impl TestApp { password_hash, role, }; - diesel::insert_into(papercrate_backend::schema::users::table) + diesel::insert_into(backend::schema::users::table) .values(&user) .execute(conn) .context("failed to insert user")?; @@ -225,7 +225,7 @@ impl TestApp { #[allow(dead_code)] pub async fn clear_jobs(&self) -> Result<()> { self.with_conn(|conn| { - use papercrate_backend::schema::jobs::dsl::jobs as jobs_table; + use backend::schema::jobs::dsl::jobs as jobs_table; diesel::delete(jobs_table) .execute(conn) .context("failed to clear jobs")?; @@ -238,7 +238,7 @@ impl TestApp { pub async fn jobs_by_type(&self, ty: &str) -> Result> { let ty = ty.to_string(); self.with_conn(move |conn| { - use papercrate_backend::schema::jobs::dsl::{ + use backend::schema::jobs::dsl::{ job_type as job_type_col, jobs as jobs_table, }; let rows = jobs_table