Skip to content

Commit 8784d1a

Browse files
committed
Clean CI/CD
1 parent 146b685 commit 8784d1a

File tree

1 file changed

+64
-52
lines changed

1 file changed

+64
-52
lines changed

.github/workflows/branch.yml

Lines changed: 64 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ jobs:
1414
name: Symfony (PHP ${{ matrix.php-versions }})
1515
runs-on: ubuntu-latest
1616
env:
17-
DATABASE_URL: mysql://root:symfony@127.0.0.1:3306/symfony?Version=9.3
17+
DATABASE_URL: mysql://root:symfony@127.0.0.1:3306/symfony?serverVersion=9.3
1818

19-
# Docs: https://docs.github.com/en/actions/using-containerized-services
2019
services:
2120
mysql:
2221
image: mysql:9.3
@@ -35,7 +34,6 @@ jobs:
3534
- name: Checkout
3635
uses: actions/checkout@v4
3736

38-
# Docs: https://github.com/shivammathur/setup-php
3937
- name: Setup PHP
4038
uses: shivammathur/setup-php@v2
4139
with:
@@ -44,72 +42,91 @@ jobs:
4442
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
4543
coverage: xdebug
4644

47-
# Local MySQL service in GitHub hosted environments is disabled by default.
48-
# If you are using it instead of service containers, make sure you start it.
49-
# - name: Start mysql service
50-
# run: sudo systemctl start mysql.service
51-
5245
- name: Copy .env.dist
5346
run: php -r "file_exists('.env.local') || copy('.env.dist', '.env.local');"
47+
5448
- name: Get composer cache directory
5549
id: composer-cache
5650
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
51+
5752
- name: Cache composer dependencies
5853
uses: actions/cache@v4
5954
with:
6055
path: ${{ steps.composer-cache.outputs.dir }}
61-
# Use composer.json for key, if composer.lock is not committed.
62-
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
6356
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
6457
restore-keys: ${{ runner.os }}-composer-
58+
6559
- name: Install Composer dependencies
66-
if: steps.composer-cache.outputs.cache-hit != 'true'
6760
run: composer install --no-progress --prefer-dist --optimize-autoloader
6861
env:
69-
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony?Version=9.3
62+
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony?serverVersion=9.3
63+
7064
- name: Run Migration
7165
run: |
72-
composer require --dev symfony/orm-pack
7366
php bin/console doctrine:schema:update --complete --force || echo "No migrations found or schema update failed"
74-
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
67+
php bin/console doctrine:migrations:migrate --no-interaction || echo "No migrations found or migration failed"
7568
env:
76-
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony?Version=9.3
77-
- name: Install PHPUnit
78-
run: composer require --dev phpunit/phpunit && vendor/bin/phpunit --coverage-text
69+
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony?serverVersion=9.3
70+
71+
- name: Run Tests
72+
run: |
73+
composer require --dev phpunit/phpunit
74+
vendor/bin/phpunit --coverage-text
75+
env:
76+
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony?serverVersion=9.3
77+
7978
deploy:
8079
name: Deploy image
8180
runs-on: ubuntu-latest
8281
needs: validate
82+
if: github.event_name == 'push'
8383
env:
8484
DOCKER_BRANCH: ${{ github.ref_name }}
8585
DOMAIN_URL: ${{ secrets.DOMAIN_URL }}
8686
DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
87+
MYSQL_ROOT_PASSWORD: ${{ secrets.MYSQL_ROOT_PASSWORD }}
88+
MYSQL_USER: ${{ secrets.MYSQL_USER }}
89+
MYSQL_PASSWORD: ${{ secrets.MYSQL_PASSWORD }}
90+
MYSQL_DATABASE: ${{ secrets.MYSQL_DATABASE }}
8791
steps:
8892
- uses: actions/checkout@v4
93+
8994
- name: Set environment variables
95+
id: set-env
9096
run: |
91-
echo "DOCKER_NETWORK_NAME=api-${DOCKER_BRANCH}" >> $GITHUB_ENV
92-
echo "DATABASE_URL=mysql://root:symfony@db:3306/symfony" >> $GITHUB_ENV
93-
if [[ "${DOCKER_BRANCH}" == "alpha" ]]; then
94-
echo "APP_ENV=dev" >> $GITHUB_ENV
95-
else
96-
echo "APP_ENV=prod" >> $GITHUB_ENV
97-
fi
97+
echo "DOCKER_NETWORK_NAME=api-${DOCKER_BRANCH}" >> $GITHUB_ENV
98+
echo "DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@db:3306/${MYSQL_DATABASE}?serverVersion=9.3" >> $GITHUB_ENV
99+
100+
if [[ "${DOCKER_BRANCH}" == "master" ]]; then
101+
echo "APP_ENV=prod" >> $GITHUB_ENV
102+
echo "HOSTNAME=api.${DOMAIN_URL}" >> $GITHUB_ENV
103+
elif [[ "${DOCKER_BRANCH}" == "preprod" ]]; then
104+
echo "APP_ENV=prod" >> $GITHUB_ENV
105+
echo "HOSTNAME=api.${DOCKER_BRANCH}.${DOMAIN_URL}" >> $GITHUB_ENV
106+
else
107+
echo "APP_ENV=dev" >> $GITHUB_ENV
108+
echo "HOSTNAME=api.${DOCKER_BRANCH}.${DOMAIN_URL}" >> $GITHUB_ENV
109+
fi
110+
98111
- name: Login to registry
99112
uses: docker/login-action@v3
100113
with:
101114
registry: ${{ secrets.DOCKER_REGISTRY }}
102115
username: ${{ secrets.DOCKER_LOGIN }}
103116
password: ${{ secrets.DOCKER_PASSWD }}
117+
104118
- name: Build and push Docker image
105119
uses: docker/build-push-action@v5
106120
with:
107121
context: .
108122
push: true
109123
tags: ${{ secrets.DOCKER_REGISTRY }}/api-php:${{ github.ref_name }}
110124
build-args: |
111-
APP_ENV=${{ env.APP_ENV }}
112-
DATABASE_URL=${{ env.DATABASE_URL }}
125+
APP_ENV=${{ env.APP_ENV }}
126+
DATABASE_URL=${{ env.DATABASE_URL }}
127+
cache-from: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/api-php:${{ github.ref_name }}
128+
cache-to: type=inline
129+
113130
- name: Configure SSH
114131
env:
115132
SSH_USER: ${{ secrets.SSH_USER }}
@@ -128,34 +145,29 @@ jobs:
128145
IdentityFile ~/.ssh/staging.key
129146
StrictHostKeyChecking no
130147
END
131-
- name: Update envs & run migrations
132-
# with:
133-
# SYMFONY_ENV: ${{ secrets.SYMFONY_ENV }}
148+
149+
- name: Deploy and run migrations
134150
run: |
135-
if [[ "${DOCKER_BRANCH}" == "master" ]]; then
136-
HOSTNAME="api.$DOMAIN_URL"
137-
APP_ENV="prod"
138-
elif [[ "${DOCKER_BRANCH}" == "preprod" ]]; then
139-
HOSTNAME="api.${DOCKER_BRANCH}.$DOMAIN_URL"
140-
APP_ENV="prod"
141-
else
142-
HOSTNAME="api.${DOCKER_BRANCH}.$DOMAIN_URL"
143-
APP_ENV="dev"
144-
fi
145151
ssh staging "cd /var/docker/api/${DOCKER_BRANCH} && \
146-
export DOCKER_BRANCH=${DOCKER_BRANCH} && \
147-
export DOCKER_REGISTRY=${DOCKER_REGISTRY} && \
148-
echo 'APP_ENV=${APP_ENV}' > .env && \
149-
echo 'DATABASE_URL=${DATABASE_URL}' >> .env && \
150-
echo 'DOCKER_NETWORK_NAME=api-${DOCKER_BRANCH}' >> .env && \
151-
echo 'HOSTNAME=${HOSTNAME}' >> .env && \
152-
echo 'MYSQL_ROOT_PASSWORD=${{ secrets.MYSQL_ROOT_PASSWORD }}' >> .env && \
153-
echo 'MYSQL_USER=${{ secrets.MYSQL_USER }}' >> .env && \
154-
echo 'MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }}' >> .env && \
155-
echo 'MYSQL_DATABASE=${{ secrets.MYSQL_DATABASE }}' >> .env && \
152+
export DOCKER_BRANCH='${DOCKER_BRANCH}' && \
153+
export DOCKER_REGISTRY='${DOCKER_REGISTRY}' && \
154+
cat > .env << 'ENVEOF'
155+
APP_ENV=${APP_ENV}
156+
DATABASE_URL=${DATABASE_URL}
157+
DOCKER_NETWORK_NAME=${DOCKER_NETWORK_NAME}
158+
HOSTNAME=${HOSTNAME}
159+
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
160+
MYSQL_USER=${MYSQL_USER}
161+
MYSQL_PASSWORD=${MYSQL_PASSWORD}
162+
MYSQL_DATABASE=${MYSQL_DATABASE}
163+
ENVEOF
156164
git pull origin ${DOCKER_BRANCH} && \
157165
docker compose --file docker-compose-branch.yml pull && \
158166
docker login -u ${{ secrets.DOCKER_LOGIN }} -p ${{ secrets.DOCKER_PASSWD }} ${DOCKER_REGISTRY} && \
159-
docker compose --project-name ${DOCKER_BRANCH}-api_php --file docker-compose-branch.yml up -d && \
160-
until docker exec ${DOCKER_BRANCH}-api_php-sf true 2>/dev/null; do sleep 5; done && \
161-
docker compose --project-name ${DOCKER_BRANCH}-api_php --file docker-compose-branch.yml exec symfony php bin/console doctrine:migrations:migrate --no-interaction"
167+
docker compose --project-name ${DOCKER_BRANCH}-api_php --file docker-compose-branch.yml up -d --remove-orphans && \
168+
echo 'Waiting for container to be ready...' && \
169+
until docker exec ${DOCKER_BRANCH}-api_php-sf true 2>/dev/null; do sleep 2; done && \
170+
echo 'Running migrations...' && \
171+
docker compose --project-name ${DOCKER_BRANCH}-api_php --file docker-compose-branch.yml exec -T symfony php bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration && \
172+
echo 'Clearing cache...' && \
173+
docker compose --project-name ${DOCKER_BRANCH}-api_php --file docker-compose-branch.yml exec -T symfony php bin/console cache:clear"

0 commit comments

Comments
 (0)