Files
Remsly/.gitea/workflows/build.yml
T

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"