Skip to content

Commit f93b359

Browse files
authored
Merge pull request #1210 from NFDI4Chem/prod-deployment
fix: update deployment files for production
2 parents f5ffee9 + ce6cc23 commit f93b359

File tree

5 files changed

+560
-113
lines changed

5 files changed

+560
-113
lines changed

.github/workflows/prod-build.yml

Lines changed: 61 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,126 +1,79 @@
1-
# GitHub Actions workflow for building and deploying NMRXiv to production
2-
# Triggered when a new release is published
3-
name : Setup, Build and Publish to Production
1+
# GitHub Actions workflow for building and deploying NMRXiv to production environment
2+
# This workflow runs tests, builds Docker images, and deploys to the FSU production environment
3+
name: Setup, Build and Publish to Prod
44

5-
# Workflow triggers
5+
# Trigger the workflow on pushes to the production branch
66
on:
77
push:
88
branches: [production]
99

10-
# Environment variables used throughout the workflow
10+
# Environment variables used across all jobs
1111
env:
12-
DOCKER_HUB_USERNAME : ${{ secrets.DOCKER_HUB_USERNAME }}
13-
DOCKER_HUB_PASSWORD : ${{ secrets.DOCKER_HUB_PASSWORD }}
12+
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
13+
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
1414
REPOSITORY_NAME: nmrxiv
1515
REPOSITORY_NAMESPACE: nfdi4chem
1616

1717
jobs:
18-
# Job 1: Run PHP unit tests with PostgreSQL database
19-
php-unit-test:
20-
name: Run tests
21-
runs-on: ubuntu-latest
22-
23-
# Set up PostgreSQL service for testing
24-
services:
25-
postgres:
26-
image: postgres:13
27-
env:
28-
POSTGRES_USER: postgres
29-
POSTGRES_PASSWORD: postgres
30-
POSTGRES_DB: nmrxiv
31-
ports:
32-
- 5432:5432
33-
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
34-
35-
steps:
36-
# Check out the repository code
37-
- uses: actions/checkout@v4
38-
39-
# Set up PHP 8.2 with required extensions
40-
- name: Setup PHP
41-
uses: shivammathur/setup-php@v2
42-
with:
43-
php-version: '8.2'
44-
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, pdo_pgsql, bcmath, soap, intl, gd, exif, iconv
45-
coverage: pcov
46-
47-
# Install PHP dependencies via Composer
48-
- name: Install composer dependencies
49-
run: composer install --ignore-platform-reqs
50-
51-
# Configure Laravel application for testing
52-
- name: Prepare Laravel Application
53-
run: |
54-
php -r "file_exists('.env') || copy('.env.ci.test', '.env');"
55-
echo AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID_DEV }} >> .env
56-
echo AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} >> .env
57-
echo MEILISEARCH_KEY=${{ secrets.MEILISEARCH_KEY_DEV }} >> .env
58-
echo MEILISEARCH_PUBLICKEY=${{ secrets.MEILISEARCH_PUBLICKEY_DEV }} >> .env
59-
echo TWITTER_CLIENT_ID=${{ secrets.TWITTER_CLIENT_ID_DEV }} >> .env
60-
echo TWITTER_CLIENT_SECRET=${{ secrets.TWITTER_CLIENT_SECRET_DEV }} >> .env
61-
echo GITHUB_CLIENT_ID=${{ secrets.CLIENT_ID_GITHUB_DEV }} >> .env
62-
echo GITHUB_CLIENT_SECRET=${{ secrets.CLIENT_SECRET_GITHUB_DEV }} >> .env
63-
php artisan key:generate
64-
php artisan migrate --seed
65-
66-
# Install and build front-end assets
67-
- name: Install front-end dependencies
68-
run: |
69-
npm install
70-
npm run build
71-
72-
# Execute PHPUnit tests with coverage collection
73-
- name: Run tests and collect coverage
74-
run: vendor/bin/phpunit --coverage-clover coverage.xml
75-
76-
# Upload test coverage results to Codecov
77-
- name: Upload coverage to Codecov
78-
uses: codecov/codecov-action@v3
79-
env:
80-
CODECOV_TOKEN: ${{ secrets.CODECOV_ORG_TOKEN }}
81-
82-
# Job 2: Build Docker images and deploy to production
18+
# Build Docker images and deploy to production environment
8319
setup-build-publish-deploy:
8420
name: Build & deploy to production
8521
runs-on: ubuntu-latest
86-
needs: php-unit-test # Wait for tests to pass before deploying
22+
# Only run this job if tests pass successfully
23+
# needs: php-unit-test
24+
# Use the Dev environment for deployment secrets and protection rules
8725
environment:
88-
name: Production
26+
name: Prod
8927
steps:
90-
# Check out the repository code
91-
- name: Checkout
92-
uses: actions/checkout@v4
28+
# Checkout the repository code for building Docker images
29+
- name: Checkout
30+
uses: actions/checkout@v4
31+
32+
# Authenticate with Docker Hub for pushing images
33+
- name: Log in to Docker Hub
34+
uses: docker/login-action@v3
35+
with:
36+
username: ${{ env.DOCKER_HUB_USERNAME }}
37+
password: ${{ env.DOCKER_HUB_PASSWORD }}
38+
39+
# Set up Docker Buildx for multi-platform builds
40+
- name: Set up Docker Buildx
41+
uses: docker/setup-buildx-action@v3
9342

94-
# Authenticate with Docker Hub registry
95-
- name: Log in to Docker Hub
96-
uses: docker/login-action@v3
97-
with:
98-
username: ${{ env.DOCKER_HUB_USERNAME }}
99-
password: ${{ env.DOCKER_HUB_PASSWORD }}
43+
# Build and push the main application Docker image for FSU deployment
44+
- name: Build and push App Docker image
45+
uses: docker/build-push-action@v6
46+
with:
47+
context: .
48+
file: ./deployment/Dockerfile
49+
push: true
50+
# Pass proxy settings and release version as build arguments
51+
build-args: |
52+
RELEASE_VERSION=app-latest
53+
# Tag the image for production environment
54+
tags: ${{ env.REPOSITORY_NAMESPACE }}/${{ env.REPOSITORY_NAME }}:app-latest
55+
# Enable build cache for faster builds
56+
cache-from: type=gha
57+
cache-to: type=gha,mode=max
10058

101-
# Build and push app Docker image for general public deployment
102-
- name: Build and push App Docker image
103-
uses: docker/build-push-action@v5
104-
with:
105-
context: .
106-
file: ./deployment/Dockerfile
107-
push: true
108-
build-args: |
109-
RELEASE_VERSION=app-latest
110-
tags: |
111-
${{ env.REPOSITORY_NAMESPACE }}/${{ env.REPOSITORY_NAME }}:app-latest
112-
${{ env.REPOSITORY_NAMESPACE }}/${{ env.REPOSITORY_NAME }}:app-${{ github.event.release.tag_name }}
59+
# Build and push the worker Docker image for background job processing
60+
- name: Build and push Worker Docker image
61+
uses: docker/build-push-action@v6
62+
with:
63+
context: .
64+
file: ./deployment/Dockerfile.worker
65+
push: true
66+
# Pass proxy settings and release version as build arguments
67+
build-args: |
68+
RELEASE_VERSION=worker-latest
69+
# Tag the worker image for production environment
70+
tags: ${{ env.REPOSITORY_NAMESPACE }}/${{ env.REPOSITORY_NAME }}:worker-latest
71+
# Enable build cache for faster builds
72+
cache-from: type=gha
73+
cache-to: type=gha,mode=max
11374

114-
# Build and push worker Docker image for general public deployment
115-
- name: Build and push Worker Docker image
116-
uses: docker/build-push-action@v5
117-
with:
118-
context: .
119-
file: ./deployment/Dockerfile.worker
120-
push: true
121-
build-args: |
122-
RELEASE_VERSION=worker-latest
123-
# Fixed: Combined duplicate tags into a single tags block with pipe syntax
124-
tags: |
125-
${{ env.REPOSITORY_NAMESPACE }}/${{ env.REPOSITORY_NAME }}:worker-latest
126-
${{ env.REPOSITORY_NAMESPACE }}/${{ env.REPOSITORY_NAME }}:worker-${{ github.event.release.tag_name }}
75+
# Optional: Add deployment step if needed
76+
# - name: Deploy to production environment
77+
# run: |
78+
# echo "Add your deployment commands here"
79+
# # Example: kubectl apply -f k8s/ or docker-compose up -d

0 commit comments

Comments
 (0)