Skip to content

Build & Deploy (manually) #4

Build & Deploy (manually)

Build & Deploy (manually) #4

Workflow file for this run

name: Build & Deploy (manually)
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch to (re)deploy from'
required: true
default: 'development'
type: choice
options:
- main
- development
environment:
description: 'Environment to (re)deploy to'
type: environment
default: 'development'
required: true
jobs:
build_frontend:
name: build frontend
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
with:
ref: ${{ inputs.branch }}
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
- name: Install npm packages
run: |
cd frontend
npm install
- name: Build & bundle
run: |
cd frontend
unset CI # ignore React warnings
npm run build
build_backend:
name: build backend
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
with:
ref: ${{ inputs.branch }}
- name: Fetch submodules
run: |
cd backend
cd apps
git submodule update --init --recursive
git submodule update --remote
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Create venv
run: |
cd backend
python3.11 -m venv venv
- name: Install packages
run: |
cd backend
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
- name: Install ifcopenshell package (temp)
run: |
cd backend
source venv/bin/activate
# use version of ifcopenshell with desired schema parsing
# TODO: revert to pyPI when schema parsing is published in the future
wget -O /tmp/ifcopenshell_python.zip "https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.9-c18e4ea-linux64.zip"
mkdir -p /opt/venv/lib/python3.11/site-packages
unzip -d /opt/venv/lib/python3.11/site-packages /tmp/ifcopenshell_python.zip
- name: Check Django config
run: |
cd backend
source venv/bin/activate
python3 manage.py check
- name: Run tests
run: |
cd backend
source venv/bin/activate
python3 manage.py test
deploy:
name: deploy to server (${{ inputs.environment }})
needs: [build_frontend, build_backend]
runs-on: ubuntu-latest
environment:
name: ${{ inputs.environment }}
steps:
- name: Configure SSH
run: |
mkdir -p ~/.ssh/
echo "$SSH_KEY" > ~/.ssh/ssh_host.key
chmod 600 ~/.ssh/ssh_host.key
cat >>~/.ssh/config <<END
Host ssh_host
HostName $SSH_HOST
User $SSH_USER
IdentityFile ~/.ssh/ssh_host.key
StrictHostKeyChecking no
END
env:
SSH_USER: ${{ secrets.SSH_USERNAME }}
SSH_KEY: ${{ secrets.SSH_PRIV_KEY }}
SSH_HOST: ${{ secrets.SSH_HOST }}
- name: Stop Docker containers
run: |
ssh ssh_host 'cd ${{ vars.REPO_CLONE_PATH }}
sudo make stop'
- name: Fetch sources & submodules
run: |
ssh ssh_host 'cd ${{ vars.REPO_CLONE_PATH }}
git checkout -q ${{ inputs.branch }} && git pull
sudo make fetch-modules
cd ${{ vars.REPO_CLONE_PATH }}/backend/apps/ifc_validation/checks/ifc_gherkin_rules && git checkout -q ${{ inputs.branch }} && git pull
cd ./ifc_validation_models && git checkout -q ${{ inputs.branch }} && git pull
cd ${{ vars.REPO_CLONE_PATH }}/backend/apps/ifc_validation/checks/step_file_parser && git checkout -q master && git pull
cd ${{ vars.REPO_CLONE_PATH }}/backend/apps/ifc_validation_models && git checkout -q ${{ inputs.branch }} && git pull
cd ${{ vars.REPO_CLONE_PATH }}
./check-submodules.sh'
- name: Check local changes
run: |
ssh ssh_host 'cd ${{ vars.REPO_CLONE_PATH }}
if [ -z "$(git status --porcelain)" ]; then
echo "No local changes"
else
echo "ERROR: There are local changes in ${{ inputs.environment }}"
git status --porcelain
exit -1
fi'
- name: Show repo & git status
run: |
ssh ssh_host 'cd ${{ vars.REPO_CLONE_PATH }}
echo "*** Validate repository"
git remote get-url origin && git rev-parse --abbrev-ref HEAD && git rev-parse --short HEAD
echo "*** git status"
git status'
- name: Show submodule status
run: |
ssh ssh_host 'cd ${{ vars.REPO_CLONE_PATH }} && \
./check-submodules.sh'
- name: Set VERSION
run: |
ssh ssh_host 'cd ${{ vars.REPO_CLONE_PATH }}
COMMIT_HASH=$(git rev-parse --short HEAD)
VERSION="${{ vars.VERSION }}"
echo "Set VERSION to ${VERSION}"
echo "Set COMMIT_HASH to ${COMMIT_HASH}"
echo "${VERSION}" > .VERSION'
- name: Build Docker images
run: |
ssh ssh_host 'cd ${{ vars.REPO_CLONE_PATH }}
sudo make rebuild'
- name: Start Docker containers
run: |
ssh ssh_host 'cd ${{ vars.REPO_CLONE_PATH }}
sudo docker compose -f ${{ vars.DOCKER_COMPOSE_FILE }} --env-file ${{ vars.ENV_FILE }} up -d'