Dockerise our ModelScan application #4641
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Bailo Image | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
jobs: | |
build_backend: | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
steps: | |
# Clone repository | |
- uses: actions/checkout@v3 | |
# Setup BuildX | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Build backend image | |
uses: docker/build-push-action@v3 | |
with: | |
context: backend | |
file: backend/Dockerfile | |
tags: bailo_backend:latest | |
cache-from: type=gha,scope=backend | |
cache-to: type=gha,mode=max,scope=backend | |
outputs: type=docker,dest=/tmp/bailo_backend.tar | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bailo_backend | |
path: /tmp/bailo_backend.tar | |
build_frontend: | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
steps: | |
# Clone repository | |
- uses: actions/checkout@v3 | |
# Setup BuildX | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Build frontend image | |
uses: docker/build-push-action@v3 | |
with: | |
context: frontend | |
file: frontend/Dockerfile | |
tags: bailo_frontend:latest | |
cache-from: type=gha,scope=frontend | |
cache-to: type=gha,mode=max,scope=frontend | |
outputs: type=docker,dest=/tmp/bailo_frontend.tar | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bailo_frontend | |
path: /tmp/bailo_frontend.tar | |
unit_testing: | |
runs-on: ubuntu-latest | |
steps: | |
# Clone repository | |
- uses: actions/checkout@v3 | |
- name: Use Node.js 18 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18.17.1 | |
cache: "npm" | |
# Install dependencies | |
- run: npm ci | |
# Create certs | |
- run: sudo chown -R runner:docker backend/certs | |
- run: npm run certs | |
# Run unit tests | |
- run: npm run test | |
style: | |
runs-on: ubuntu-latest | |
steps: | |
# Clone repository | |
- uses: actions/checkout@v3 | |
- name: Use Node.js 18 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18.17.1 | |
cache: "npm" | |
# Install dependencies | |
- run: npm ci | |
# Run style checks | |
- run: npm run check-style | |
- run: npm run lint | |
kubernetes: | |
needs: [build_backend, build_frontend] | |
runs-on: ubuntu-latest | |
steps: | |
# Clone repository | |
- uses: actions/checkout@v3 | |
- name: Use Node.js 18 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18.17.1 | |
cache: "npm" | |
# Setup BuildX | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
# Get Bailo Docker image | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: bailo_backend | |
path: /tmp | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: bailo_frontend | |
path: /tmp | |
- name: Start minikube | |
uses: medyagh/setup-minikube@master | |
- name: List Cluster | |
run: kubectl get pods -A | |
- name: Load docker image to minikube | |
run: | | |
eval $(minikube -p minikube docker-env) | |
docker load -i /tmp/bailo_backend.tar | |
docker load -i /tmp/bailo_frontend.tar | |
# Install dependencies | |
- run: npm ci | |
# Create certs | |
- run: sudo chown -R runner:docker backend/certs | |
- run: npm run certs | |
# Add bailo NodePort | |
- name: Create NodePort Config | |
run: | | |
cat << EOT >> infrastructure/helm/bailo/templates/nodePort.yaml | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: node-port | |
spec: | |
type: NodePort | |
ports: | |
- port: {{ .Values.nginxAuth.port }} | |
targetPort: {{ .Values.nginxAuth.port }} | |
selector: | |
name: nginx | |
EOT | |
# Create local.yaml | |
- name: Create local.yaml | |
run: | | |
cat << EOT >> infrastructure/helm/bailo/local.yaml | |
--- | |
# Instance Settings | |
securityContext: | |
runAsUser: 1002 | |
config: | |
ui: | |
banner: | |
enabled: "true" | |
text: "BAILO TEST" | |
build: | |
environment: img | |
# Bailo | |
image: | |
frontendRepository: "bailo_frontend" | |
frontendTag: latest | |
backendRepository: "bailo_backend" | |
backendTag: latest | |
# Used for k8s not openshift | |
ingress: | |
enabled: false | |
route: | |
enabled: false | |
appPublicRoute: localhost | |
mongodb: | |
architecture: standalone | |
auth: | |
passwords: | |
- MongoDBPassword | |
usernames: | |
- bailo_user | |
EOT | |
- name: Set Bailo image pull policy to Never | |
run: sed -i 's/{{ .Values.image.pullPolicy }}/Never/g' infrastructure/helm/bailo/templates/bailo/bailo.deployment.yaml | |
- name: HELM update dependency update | |
working-directory: ./infrastructure/helm/bailo | |
run: helm dependency update | |
- name: HELM deploy to minikube | |
working-directory: ./infrastructure/helm/bailo | |
run: helm install --values ./local.yaml bailo . | |
- name: Sleep for 90 seconds | |
run: sleep 90s | |
shell: bash | |
- name: List Pods | |
run: kubectl get pods | |
- name: List Services | |
run: kubectl get services | |
- name: HELM test Bailo | |
working-directory: ./infrastructure/helm/bailo | |
run: helm test bailo | |
- name: Test Bailo URL | |
run: | | |
minikube service list | |
echo "---------------curl connect to bailo---------------" | |
curl $(minikube service node-port --url) | |
# Run Cypress integration tests | |
#- run: CYPRESS_BASE_URL=$(minikube service node-port --url) npm run cy:run | |
- uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: cypress-screenshots-k8s | |
path: cypress/screenshots | |
# - uses: actions/upload-artifact@v3 | |
# if: always() | |
# with: | |
# name: cypress-videos | |
# path: cypress/videos | |
- name: Print application logs | |
if: always() | |
run: kubectl logs -l app.kubernetes.io/instance=bailo --tail=-1 | |
end_to_end: | |
needs: [build_backend, build_frontend] | |
runs-on: ubuntu-latest | |
steps: | |
# Clone repository | |
- uses: actions/checkout@v3 | |
- name: Use Node.js 18 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18.17.1 | |
cache: "npm" | |
# Setup BuildX | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
# Get Bailo Docker images | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: bailo_backend | |
path: /tmp | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: bailo_frontend | |
path: /tmp | |
- name: Load image | |
run: | | |
docker load --input /tmp/bailo_frontend.tar | |
docker load --input /tmp/bailo_backend.tar | |
docker image ls -a | |
rm -rf /tmp/bailo_frontend.tar /tmp/bailo_backend.tar | |
# Create logs directory | |
- run: mkdir logs | |
# Install dependencies | |
- run: npm ci | |
# Create certs | |
- run: sudo chown -R runner:docker backend/certs | |
- run: npm run certs | |
# Configure application | |
- name: Configure Bailo | |
run: | | |
cat <<EOT >> backend/config/local.cjs | |
module.exports = { | |
minio: { | |
accessKey: 'minioadmin', | |
secretKey: 'minioadmin', | |
}, | |
smtp: { | |
auth: { | |
user: 'mailuser', | |
pass: 'mailpass', | |
}, | |
tls: { | |
rejectUnauthorized: false, | |
}, | |
}, | |
logging: { | |
file: { | |
path: '/home/runner/work/Bailo/Bailo/logs/out.log', | |
}, | |
}, | |
} | |
EOT | |
- run: docker compose -f docker-compose-prod.yml up -d | |
# wait for app to start | |
- run: | | |
chmod +x ./backend/src/scripts/waitForIt.sh | |
./backend/src/scripts/waitForIt.sh localhost:8080 -t 10 | |
# wait for mongo to start | |
- run: | | |
chmod +x ./backend/src/scripts/waitForIt.sh | |
./backend/src/scripts/waitForIt.sh localhost:27017 -t 10 | |
- uses: cypress-io/github-action@v5 | |
with: | |
wait-on: 'http://localhost:8080/api/v2/config/ui' | |
working-directory: ./frontend | |
install: false | |
spec: cypress/e2e/bailo/**/* | |
- uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: cypress-screenshots-e2e | |
path: frontend/cypress/screenshots | |
# - uses: actions/upload-artifact@v3 | |
# if: always() | |
# with: | |
# name: cypress-videos | |
# path: cypress/videos | |
- name: Dump docker compose logs | |
if: always() | |
run: docker compose logs > logs/stack.log | |
- name: Docker Compose Logs | |
if: always() | |
run: cat logs/stack.log | |
- uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: logs | |
path: logs | |
integration_python: | |
needs: [build_backend, build_frontend] | |
runs-on: ubuntu-latest | |
steps: | |
# Clone repository | |
- uses: actions/checkout@v3 | |
- name: Use Node.js 18 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18.17.1 | |
cache: "npm" | |
# Setup BuildX | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
# Get Bailo Docker images | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: bailo_backend | |
path: /tmp | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: bailo_frontend | |
path: /tmp | |
- name: Load image | |
run: | | |
docker load --input /tmp/bailo_frontend.tar | |
docker load --input /tmp/bailo_backend.tar | |
docker image ls -a | |
# Create logs directory | |
- run: mkdir logs | |
# Install dependencies | |
- run: npm ci | |
# Create certs | |
- run: sudo chown -R runner:docker backend/certs | |
- run: npm run certs | |
# Configure application | |
- name: Configure Bailo | |
run: | | |
cat <<EOT >> backend/config/local.cjs | |
module.exports = { | |
minio: { | |
accessKey: 'minioadmin', | |
secretKey: 'minioadmin', | |
}, | |
smtp: { | |
auth: { | |
user: 'mailuser', | |
pass: 'mailpass', | |
}, | |
tls: { | |
rejectUnauthorized: false, | |
}, | |
}, | |
logging: { | |
file: { | |
path: '/home/runner/work/Bailo/Bailo/logs/out.log', | |
}, | |
}, | |
} | |
EOT | |
- run: docker compose -f docker-compose-prod.yml up -d | |
# wait for app to start | |
- run: | | |
chmod +x ./backend/src/scripts/waitForIt.sh | |
./backend/src/scripts/waitForIt.sh localhost:8080 -t 10 | |
# wait for mongo to start | |
- run: | | |
chmod +x ./backend/src/scripts/waitForIt.sh | |
./backend/src/scripts/waitForIt.sh localhost:27017 -t 10 | |
# Setup python | |
- name: Set up Python 3.11 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.11" | |
# Install dependencies | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
cd lib/python | |
python -m pip install -e .[test] | |
# Run tests | |
- name: Test with pytest | |
run: | | |
cd lib/python | |
python -m pytest -m integration | |
- name: Dump docker compose logs | |
if: always() | |
run: docker compose logs > logs/stack.log | |
- name: Docker Compose Logs | |
if: always() | |
run: cat logs/stack.log | |
- uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: logs | |
path: logs |