Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .env
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
COMPOSE_PROJECT_NAME='fluffevent-help'
IMAGES_PREFIX='fluffevent-help'

# -- Override the values below with your own in `.env.local`.
# -- Leave values empty to use defaults.

# Docker ports configuration
# Docker ports
# (host ports: "*_PORT"; container ports: "*_DOCKER_PORT")
HTTP_PORT=''
HTTP_DOCKER_PORT=''

# Deployment configuration
# Deployment
GITHUB_REPOSITORY_URL=''
GITHUB_SHA=''
VERSION_TAG=''

# Astro configuration
# Astro
ASTRO_SITE_URL=''
ASTRO_BASE_PATH=''
ASTRO_ASSETS_PREFIX=''

# Application configuration
# Add env vars for your application here.
# Application
# (Add env vars for your application here.)
269 changes: 256 additions & 13 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ on:
- '.github/workflows/check.yml'
- 'docker-compose.yml'
- 'docker-compose.cicd.yml'
- 'docker-compose.test-unit.yml'
- 'docker-compose.test-e2e.yml'
- '.env'
# Application files
- 'app/**'
Expand All @@ -50,55 +52,60 @@ jobs:

steps:

# Steps dependencies
# Dependency steps

- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

# Execution steps

- name: Copy Git history in app source folder
run: |
# Copy app source code git history
# Initialize Git repository in app source code directory
echo '::group::Init Git repository in app source code directory'
(
cd app/app &&
cd app &&
rm -rf .git &&
git init -b main &&
git config receive.denyCurrentBranch ignore
)
# Get Git history of app source code
git subtree split --prefix=app/app -b app-history
# Push Git history to app source code directory
echo '::endgroup::'
echo '::group::Get Git history of app source code'
git subtree split --prefix=app -b app-history
echo '::endgroup::'
echo '::group::Push Git history to app source code directory'
(
git remote add app ./app/app/.git &&
git remote add app ./app/.git &&
git push app app-history:main &&
git branch -D app-history &&
git remote remove app
)
echo '::endgroup::'

- name: Pull dependencies
run: |
# docker compose pull --ignore-buildable
echo '::group::Pull details'
docker compose \
-f ./docker-compose.yml -f ./docker-compose.cicd.yml \
--env-file .env \
pull --ignore-buildable
echo '::endgroup::'

- name: Build for production
env:
# Build configuration
# Build
BUILD_CHECK: 'true' # Run type checks
# Deployment configuration
# Deployment
GITHUB_REPOSITORY_URL: https://github.com/${{ github.repository }}
GITHUB_SHA: ${{ github.sha }}
VERSION_TAG: ${{ vars.VERSION_TAG }}
# Astro configuration
# Astro
ASTRO_SITE_URL: ${{ vars.ASTRO_SITE_URL }}
ASTRO_BASE_PATH: ${{ vars.ASTRO_BASE_PATH }}
ASTRO_ASSETS_PREFIX: ${{ vars.ASTRO_ASSETS_PREFIX }}
# Application configuration
# Add env vars for your application here.
# Application
# (Add env vars for your application here.)
run: |
# docker compose build
echo '::group::Build details'
Expand All @@ -112,15 +119,251 @@ jobs:
- name: Copy application files
run: |
# docker compose up
echo '::group::Run details'
export DOCKER_UID="$(id -u)"
docker compose \
-f ./docker-compose.yml -f ./docker-compose.cicd.yml \
--env-file .env \
up
echo '::endgroup::'

- name: Check application files
run: |
# Check application files
[ -d ./app/dist ] && [ $(ls -1 ./app/dist | wc -l) -gt 0 ] \
&& echo 'Application files found' \
|| ( echo 'No application files found' && exit 1 )

# Test Unit job
test-unit:
name: Test Unit
runs-on: ubuntu-latest
timeout-minutes: 20

steps:

# Dependency steps

- name: Checkout
uses: actions/checkout@v5

# Execution steps

- name: Pull images for unit tests
run: |
# docker compose pull --ignore-buildable
echo '::group::Pull details'
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-unit.yml \
--env-file .env \
pull --ignore-buildable
echo '::endgroup::'

- name: Build images for unit tests
env:
# Deployment
GITHUB_REPOSITORY_URL: https://github.com/${{ github.repository }}
GITHUB_SHA: ${{ github.sha }}
VERSION_TAG: ${{ vars.VERSION_TAG }}
# Astro
ASTRO_SITE_URL: ${{ vars.ASTRO_SITE_URL }}
ASTRO_BASE_PATH: ${{ vars.ASTRO_BASE_PATH }}
ASTRO_ASSETS_PREFIX: ${{ vars.ASTRO_ASSETS_PREFIX }}
# Application
# (Add env vars for your application here.)
run: |
# docker compose build
echo '::group::Build details'
export DOCKER_UID="$(id -u)"
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-unit.yml \
--env-file .env \
build
echo '::endgroup::'

- name: Start unit tests
run: |
# docker compose up
echo '::group::Run details'
export DOCKER_UID="$(id -u)"
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-unit.yml \
--env-file .env \
up -d
echo '::endgroup::'

- name: List unit tests services
run: |
# Set DOCKER_SERVICES environment variable
DOCKER_SERVICES="$(
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-unit.yml \
--env-file .env \
config --services
)"
echo "Set DOCKER_SERVICES to '${DOCKER_SERVICES}'"
echo 'DOCKER_SERVICES<<GITHUB_ENV_EOF' >> $GITHUB_ENV
echo "${DOCKER_SERVICES}" >> $GITHUB_ENV
echo 'GITHUB_ENV_EOF' >> $GITHUB_ENV

- name: Wait for services to finish
env:
DOCKER_SERVICES: ${{ env.DOCKER_SERVICES }}
run: |
# docker compose wait
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-unit.yml \
--env-file .env \
wait $DOCKER_SERVICES \
|| exit 0

- name: Print services logs
env:
DOCKER_SERVICES: ${{ env.DOCKER_SERVICES }}
run: |
# docker compose logs
for SERVICE in $DOCKER_SERVICES; do
echo "::group::Docker logs for service '${SERVICE}'"
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-unit.yml \
--env-file .env \
logs --no-log-prefix $SERVICE
echo '::endgroup::'
done

# Check services exit codes
echo '::group::Check services exit codes'
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-unit.yml \
--env-file .env \
ps -a
NON_ZERO_EXIT_CODES=$(
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-unit.yml \
--env-file .env \
ps -a --format '{{.ExitCode}}' \
| grep -v '^0$' \
|| true
)
if [ -n "${NON_ZERO_EXIT_CODES}" ]; then
# Non-zero exit code found
exit 1
fi
echo '::endgroup::'

# Test E2E job
test-e2e:
name: Test E2E
runs-on: ubuntu-latest
timeout-minutes: 20

steps:

# Dependency steps

- name: Checkout
uses: actions/checkout@v5

# Execution steps

- name: Pull images for e2e tests
run: |
# docker compose pull --ignore-buildable
echo '::group::Pull details'
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-e2e.yml \
--env-file .env \
pull --ignore-buildable
echo '::endgroup::'

- name: Build images for e2e tests
env:
# Deployment
GITHUB_REPOSITORY_URL: https://github.com/${{ github.repository }}
GITHUB_SHA: ${{ github.sha }}
VERSION_TAG: ${{ vars.VERSION_TAG }}
# Astro
ASTRO_SITE_URL: ${{ vars.ASTRO_SITE_URL }}
ASTRO_BASE_PATH: ${{ vars.ASTRO_BASE_PATH }}
ASTRO_ASSETS_PREFIX: ${{ vars.ASTRO_ASSETS_PREFIX }}
# Application
# (Add env vars for your application here.)
run: |
# docker compose build
echo '::group::Build details'
export DOCKER_UID="$(id -u)"
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-e2e.yml \
--env-file .env \
build
echo '::endgroup::'

- name: Start e2e tests
run: |
# docker compose up
echo '::group::Run details'
export DOCKER_UID="$(id -u)"
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-e2e.yml \
--env-file .env \
up -d
echo '::endgroup::'

- name: List e2e tests services
run: |
# Set DOCKER_SERVICES environment variable
DOCKER_SERVICES="$(
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-e2e.yml \
--env-file .env \
config --services
)"
echo "Set DOCKER_SERVICES to '${DOCKER_SERVICES}'"
echo 'DOCKER_SERVICES<<GITHUB_ENV_EOF' >> $GITHUB_ENV
echo "${DOCKER_SERVICES}" >> $GITHUB_ENV
echo 'GITHUB_ENV_EOF' >> $GITHUB_ENV

- name: Wait for services to finish
env:
DOCKER_SERVICES: ${{ env.DOCKER_SERVICES }}
run: |
# docker compose wait
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-e2e.yml \
--env-file .env \
wait $DOCKER_SERVICES \
|| exit 0

- name: Print services logs
env:
DOCKER_SERVICES: ${{ env.DOCKER_SERVICES }}
run: |
# docker compose logs
for SERVICE in $DOCKER_SERVICES; do
echo "::group::Docker logs for service '${SERVICE}'"
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-e2e.yml \
--env-file .env \
logs --no-log-prefix $SERVICE
echo '::endgroup::'
done

# Check services exit codes
echo '::group::Check services exit codes'
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-e2e.yml \
--env-file .env \
ps -a
NON_ZERO_EXIT_CODES=$(
docker compose \
-f ./docker-compose.yml -f ./docker-compose.test-e2e.yml \
--env-file .env \
ps -a --format '{{.ExitCode}}' \
| grep -v '^0$' \
|| true
)
if [ -n "${NON_ZERO_EXIT_CODES}" ]; then
# Non-zero exit code found
exit 1
fi
echo '::endgroup::'
Loading
Loading