From fe8a911479c65e2d1cc10cc7339f072bb0ef341f Mon Sep 17 00:00:00 2001 From: Zaine Arch Date: Fri, 8 May 2026 23:46:34 +0100 Subject: [PATCH] Initial pipeline --- .gitea/workflows/build.yml | 38 +++++++++++++++++++++++++++++++++++ README.md | 12 +++++++++++ Dockerfile => misc/Dockerfile | 0 misc/org-backend.service | 22 ++++++++++++++++++++ pom.xml | 1 + scripts/deploy-systemd.sh | 34 +++++++++++++++++++++++++++++++ 6 files changed, 107 insertions(+) create mode 100644 .gitea/workflows/build.yml rename Dockerfile => misc/Dockerfile (100%) create mode 100644 misc/org-backend.service create mode 100755 scripts/deploy-systemd.sh diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..9007be1 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,38 @@ +name: Build Org Backend + +on: + push: + branches: + - main + + schedule: + - cron: "0 0 * * *" + + workflow_dispatch: + +jobs: + build: + runs-on: build-site + env: + APP_HOME: /home/zaine/master-folder/projects/java_projects/org_backend + SERVICE_NAME: org-backend.service + + steps: + - uses: actions/checkout@v4 + + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Verify toolchain + run: | + java -version + mvn -version + + - name: Build and test + run: mvn -B clean verify + + - name: Deploy jar and restart service + run: ./scripts/deploy-systemd.sh diff --git a/README.md b/README.md index 54d52a5..59b6281 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,15 @@ This repository contains the source code and documentation for all of my APIs. I The repository is organised into the following main directories: +# Deployment + +The main branch build is controlled by `.gitea/workflows/build.yml`. On a +successful build it packages the Spring Boot jar, installs the project-owned +`misc/org-backend.service` unit into systemd, reloads systemd, enables the +service, and restarts it. + +The service runs the stable build artifact at: + +```text +/home/zaine/master-folder/projects/java_projects/org_backend/target/org-backend.jar +``` diff --git a/Dockerfile b/misc/Dockerfile similarity index 100% rename from Dockerfile rename to misc/Dockerfile diff --git a/misc/org-backend.service b/misc/org-backend.service new file mode 100644 index 0000000..f2bdef2 --- /dev/null +++ b/misc/org-backend.service @@ -0,0 +1,22 @@ +[Unit] +Description=Org Backend Spring Boot App +After=network.target + +[Service] +User=zaine +Group=zaine +Environment=SPRING_PROFILES_ACTIVE=prod + +WorkingDirectory=/home/zaine/master-folder/projects/java_projects/org_backend + +ExecStart=/usr/bin/java -jar /home/zaine/master-folder/projects/java_projects/org_backend/target/org-backend.jar + +SuccessExitStatus=143 +Restart=always +RestartSec=5 + +# Optional: limit memory +# Environment="JAVA_OPTS=-Xms256m -Xmx1g" + +[Install] +WantedBy=multi-user.target diff --git a/pom.xml b/pom.xml index 5748a4f..3a2f795 100644 --- a/pom.xml +++ b/pom.xml @@ -88,6 +88,7 @@ + org-backend org.springframework.boot diff --git a/scripts/deploy-systemd.sh b/scripts/deploy-systemd.sh new file mode 100755 index 0000000..d0005f2 --- /dev/null +++ b/scripts/deploy-systemd.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -euo pipefail + +APP_HOME="${APP_HOME:-/home/zaine/master-folder/projects/java_projects/org_backend}" +SERVICE_NAME="${SERVICE_NAME:-org-backend.service}" + +SOURCE_DIR="$(pwd)" +SOURCE_JAR="${SOURCE_DIR}/target/org-backend.jar" +APP_TARGET_DIR="${APP_HOME}/target" +APP_JAR="${APP_TARGET_DIR}/org-backend.jar" +SOURCE_SERVICE="${SOURCE_DIR}/misc/${SERVICE_NAME}" +SYSTEMD_SERVICE="/etc/systemd/system/${SERVICE_NAME}" + +if [[ ! -f "${SOURCE_JAR}" ]]; then + echo "Missing built jar: ${SOURCE_JAR}" >&2 + exit 1 +fi + +if [[ ! -f "${SOURCE_SERVICE}" ]]; then + echo "Missing service file: ${SOURCE_SERVICE}" >&2 + exit 1 +fi + +mkdir -p "${APP_TARGET_DIR}" + +if [[ "$(realpath "${SOURCE_JAR}")" != "$(realpath -m "${APP_JAR}")" ]]; then + install -m 0644 "${SOURCE_JAR}" "${APP_JAR}" +fi + +sudo install -m 0644 "${SOURCE_SERVICE}" "${SYSTEMD_SERVICE}" +sudo systemctl daemon-reload +sudo systemctl enable "${SERVICE_NAME}" +sudo systemctl restart "${SERVICE_NAME}" +sudo systemctl --no-pager --full status "${SERVICE_NAME}"