157 lines
6.0 KiB
YAML
157 lines
6.0 KiB
YAML
name: Build Remsly
|
|
|
|
on:
|
|
push:
|
|
branches: [ main ]
|
|
|
|
jobs:
|
|
Compute-Version:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: gitea.tail276105.ts.net/remsly/ci-image:5
|
|
outputs:
|
|
version: ${{ steps.v.outputs.version }}
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v4
|
|
- name: Compute version
|
|
id: v
|
|
run: |
|
|
MAJOR=$(tr -d '[:space:]' < deploy/prod/VERSION)
|
|
VERSION="$(date -u +%Y.%m)-${MAJOR}-${GITHUB_RUN_NUMBER}"
|
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
echo "Computed version: $VERSION"
|
|
|
|
Build-Remsly-Backend:
|
|
runs-on: ubuntu-latest
|
|
needs: Compute-Version
|
|
container:
|
|
image: gitea.tail276105.ts.net/remsly/ci-image:5
|
|
env:
|
|
VERSION: ${{ needs.Compute-Version.outputs.version }}
|
|
DB_HOST_PORT: buildPostgres:5432
|
|
DB_USER: develop
|
|
DB_PASSWD: develop
|
|
DB_NAME: develop
|
|
services:
|
|
buildPostgres:
|
|
image: postgres:14-alpine
|
|
env:
|
|
POSTGRES_USER: develop
|
|
POSTGRES_PASSWORD: develop
|
|
POSTGRES_DB: develop
|
|
options: >-
|
|
--health-cmd="pg_isready -U develop -d develop -h 127.0.0.1"
|
|
--health-interval=10s
|
|
--health-timeout=5s
|
|
--health-retries=12
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v4
|
|
- name: Build BE
|
|
run: ./gradlew build -PDB_HOST_PORT=buildPostgres:5432 -PDB_USER=develop -PDB_PASSWD=develop -PDB_NAME=develop;
|
|
- name: Login to Docker Registry
|
|
uses: docker/login-action@v2
|
|
with:
|
|
registry: gitea.tail276105.ts.net
|
|
username: ${{ secrets.REGISTRY_USER }}
|
|
password: ${{ secrets.REGISTRY_PASSWORD }}
|
|
- name: Build Docker
|
|
run: |
|
|
REPOSITORY_LC=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]')
|
|
(
|
|
cd backend;
|
|
docker build -t gitea.tail276105.ts.net/${REPOSITORY_LC}-backend:${VERSION} .;
|
|
docker tag gitea.tail276105.ts.net/${REPOSITORY_LC}-backend:${VERSION} gitea.tail276105.ts.net/${REPOSITORY_LC}-backend:latest
|
|
)
|
|
|
|
- name: Push Docker Images
|
|
run: |
|
|
REPOSITORY_LC=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]')
|
|
docker push gitea.tail276105.ts.net/${REPOSITORY_LC}-backend:${VERSION}
|
|
docker push gitea.tail276105.ts.net/${REPOSITORY_LC}-backend:latest
|
|
|
|
- name: Docker imageTags
|
|
run: |
|
|
REPOSITORY_LC=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]')
|
|
echo "versioned: gitea.tail276105.ts.net/${REPOSITORY_LC}-backend:${VERSION}"
|
|
echo "latest: gitea.tail276105.ts.net/${REPOSITORY_LC}-backend:latest"
|
|
|
|
- name: Log out from Docker registry
|
|
if: always()
|
|
run: docker logout gitea.tail276105.ts.net
|
|
|
|
Build-Remsly-Frontend:
|
|
runs-on: ubuntu-latest
|
|
needs: Compute-Version
|
|
container:
|
|
image: gitea.tail276105.ts.net/remsly/ci-image:5
|
|
env:
|
|
VERSION: ${{ needs.Compute-Version.outputs.version }}
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v4
|
|
- name: Build FE
|
|
run: |
|
|
cd frontend
|
|
npm ci
|
|
npm run buildProd
|
|
- name: Login to Docker Registry
|
|
uses: docker/login-action@v2
|
|
with:
|
|
registry: gitea.tail276105.ts.net
|
|
username: ${{ secrets.REGISTRY_USER }}
|
|
password: ${{ secrets.REGISTRY_PASSWORD }}
|
|
- name: Build Docker
|
|
run: |
|
|
REPOSITORY_LC=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]')
|
|
(
|
|
cd frontend;
|
|
docker build -t gitea.tail276105.ts.net/${REPOSITORY_LC}-frontend:${VERSION} .;
|
|
docker tag gitea.tail276105.ts.net/${REPOSITORY_LC}-frontend:${VERSION} gitea.tail276105.ts.net/${REPOSITORY_LC}-frontend:latest
|
|
)
|
|
|
|
- name: Push Docker Images
|
|
run: |
|
|
REPOSITORY_LC=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]')
|
|
docker push gitea.tail276105.ts.net/${REPOSITORY_LC}-frontend:${VERSION}
|
|
docker push gitea.tail276105.ts.net/${REPOSITORY_LC}-frontend:latest
|
|
|
|
- name: Docker imageTags
|
|
run: |
|
|
REPOSITORY_LC=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]')
|
|
echo "versioned: gitea.tail276105.ts.net/${REPOSITORY_LC}-frontend:${VERSION}"
|
|
echo "latest: gitea.tail276105.ts.net/${REPOSITORY_LC}-frontend:latest"
|
|
|
|
- name: Log out from Docker registry
|
|
if: always()
|
|
run: docker logout gitea.tail276105.ts.net
|
|
|
|
Package-Prod-Config:
|
|
runs-on: ubuntu-latest
|
|
needs: [ Compute-Version, Build-Remsly-Backend, Build-Remsly-Frontend ]
|
|
container:
|
|
image: gitea.tail276105.ts.net/remsly/ci-image:5
|
|
env:
|
|
VERSION: ${{ needs.Compute-Version.outputs.version }}
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v4
|
|
- name: Bake image versions into docker-compose.yml
|
|
run: |
|
|
# The compose file pins backend/frontend to the <<VERSION>> placeholder;
|
|
# replace it with this build's version. The manually maintained services
|
|
# (elasticsearch, keycloak, postgres, tailscale) keep their own tags.
|
|
sed -i "s|<<VERSION>>|${VERSION}|g" deploy/prod/docker-compose.yml
|
|
echo "Pinned backend/frontend images to ${VERSION}:"
|
|
grep -nE "remsly-(backend|frontend)" deploy/prod/docker-compose.yml
|
|
- name: Build config.tar.gz
|
|
run: tar -czf config.tar.gz -C deploy/prod .
|
|
- name: Upload config to Gitea generic package registry
|
|
run: |
|
|
REPOSITORY_LC=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]')
|
|
OWNER=${REPOSITORY_LC%%/*}
|
|
curl -fsSL --user "${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_PASSWORD }}" \
|
|
--upload-file config.tar.gz \
|
|
"https://gitea.tail276105.ts.net/api/packages/${OWNER}/generic/prod-config/${VERSION}/config.tar.gz"
|
|
echo "Uploaded prod-config/${VERSION}/config.tar.gz" |