api/.gitea/workflows/deploy.yml

128 lines
3.9 KiB
YAML

name: Laravel CI-CD
on:
push:
branches: ["main"]
env:
KAMAL_IMAGE: ghcr.io/basecamp/kamal:v2.11.0
jobs:
test:
name: Tests Unitaires
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Tests
uses: docker://laravelsail/php84-composer:latest
env:
APP_ENV: testing
APP_KEY: base64:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
DB_CONNECTION: sqlite
DB_DATABASE: ":memory:"
with:
args: >
bash -c "composer install --no-interaction --ignore-platform-req=ext-intl
&& php artisan test --compact"
deploy:
name: Deploy with Kamal
needs: test
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Deploy
env:
GITEA_TOKEN: ${{ secrets.TOKEN_GITEA }}
APP_KEY: ${{ secrets.APP_KEY }}
DB_DATABASE: ${{ secrets.DB_DATABASE }}
DB_USERNAME: ${{ secrets.DB_USERNAME }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
MEILISEARCH_KEY: ${{ secrets.MEILISEARCH_KEY }}
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_USER: ${{ secrets.SSH_USER }}
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
run: |
set -eu
WORKSPACE="${GITHUB_WORKSPACE:-$PWD}"
test -f "$WORKSPACE/config/deploy.yml"
tar \
--exclude=.kamal/secrets \
--exclude=.kamal/secrets.* \
--exclude=.env \
--exclude=.env.* \
-C "$WORKSPACE" -cf - . | docker run --rm -i \
-v /var/run/docker.sock:/var/run/docker.sock \
-e GITEA_TOKEN \
-e APP_KEY \
-e DB_DATABASE \
-e DB_USERNAME \
-e DB_PASSWORD \
-e MEILISEARCH_KEY \
-e SSH_HOST \
-e SSH_USER \
-e SSH_PRIVATE_KEY \
--entrypoint /bin/sh \
"$KAMAL_IMAGE" -lc '
set -eu
mkdir -p /workdir /root/.ssh
tar -xf - -C /workdir
cd /workdir
chmod 700 /root/.ssh
printf "%s\n" "$SSH_PRIVATE_KEY" | tr -d "\r" > /root/.ssh/id_ed25519
chmod 600 /root/.ssh/id_ed25519
REMOTE_HOST="${SSH_HOST:-89.167.35.217}"
REMOTE_USER="${SSH_USER:-root}"
mkdir -p /workdir/.ssh
cat > /workdir/.ssh/config <<'"'"'SSH_CONFIG'"'"'
Host *
IdentityFile /root/.ssh/id_ed25519
IdentitiesOnly yes
StrictHostKeyChecking yes
UserKnownHostsFile /workdir/.ssh/known_hosts
GlobalKnownHostsFile /dev/null
CheckHostIP no
SSH_CONFIG
ssh-keyscan -H "$REMOTE_HOST" > /workdir/.ssh/known_hosts
chmod 600 /workdir/.ssh/config /workdir/.ssh/known_hosts
mkdir -p .kamal
cat > .kamal/secrets <<'"'"'SECRETS'"'"'
GITEA_TOKEN=$GITEA_TOKEN
APP_KEY=$APP_KEY
DB_DATABASE=$DB_DATABASE
DB_USERNAME=$DB_USERNAME
DB_PASSWORD=$DB_PASSWORD
MEILISEARCH_KEY=$MEILISEARCH_KEY
SSH_PRIVATE_KEY=$SSH_PRIVATE_KEY
SECRETS
chmod 600 .kamal/secrets
ssh -F /workdir/.ssh/config "$REMOTE_USER@$REMOTE_HOST" <<'"'"'REMOTE'"'"'
set -eu
docker network inspect bemeal_public >/dev/null 2>&1 || docker network create bemeal_public
docker network inspect bemeal_internal >/dev/null 2>&1 || docker network create bemeal_internal
for container in bemeal-pgsql bemeal-redis bemeal-meilisearch bemeal-adminer; do
if docker inspect "$container" >/dev/null 2>&1; then
docker network connect bemeal_internal "$container" >/dev/null 2>&1 || true
fi
done
REMOTE
/kamal/bin/kamal deploy
'