Add build dir var for CI/CD workflow. #26
This file contains hidden or 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: Deploy to EC2 | |
| on: | |
| push: | |
| branches: [main] | |
| workflow_dispatch: | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| env: | |
| APP_DIR: ${{ secrets.EC2_APP_DIR }} | |
| PYTHON_BIN: ${{ secrets.EC2_PYTHON_BIN }} | |
| SERVICE_NAME: ${{ secrets.EC2_SERVICE_NAME }} | |
| UVICORN_PORT: ${{ secrets.EC2_UVICORN_PORT }} | |
| EC2_HOST: ${{ secrets.EC2_HOST }} | |
| EC2_USER: ${{ secrets.EC2_USER }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| if: hashFiles('CosmoView/package.json') != '' | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| cache: "npm" | |
| cache-dependency-path: CosmoView/package-lock.json | |
| - name: Install frontend dependencies | |
| if: hashFiles('CosmoView/package.json') != '' | |
| run: npm ci --prefix CosmoView | |
| - name: Build frontend bundle | |
| if: hashFiles('CosmoView/package.json') != '' | |
| run: npm --prefix CosmoView run build | |
| - name: Start SSH agent | |
| uses: webfactory/ssh-agent@v0.9.0 | |
| with: | |
| ssh-private-key: ${{ secrets.EC2_SSH_KEY }} | |
| - name: Add EC2 host to known_hosts | |
| run: | | |
| mkdir -p ~/.ssh | |
| ssh-keyscan -H "${{ env.EC2_HOST }}" >> ~/.ssh/known_hosts | |
| - name: Ensure remote application directory exists | |
| env: | |
| REMOTE_APP_DIR: ${{ env.APP_DIR }} | |
| run: | | |
| set -euo pipefail | |
| APP_DIR="${REMOTE_APP_DIR:-/opt/nasa-sky-explorer}" | |
| ssh "${{ env.EC2_USER }}@${{ env.EC2_HOST }}" "sudo mkdir -p ${APP_DIR}" | |
| - name: Sync repository to EC2 | |
| env: | |
| REMOTE_APP_DIR: ${{ env.APP_DIR }} | |
| run: | | |
| set -euo pipefail | |
| APP_DIR="${REMOTE_APP_DIR:-/opt/nasa-sky-explorer}" | |
| TEMP_DIR="/tmp/nasa-sky-explorer-deploy-$$" | |
| # Sync to temp directory first | |
| ssh "${{ env.EC2_USER }}@${{ env.EC2_HOST }}" "mkdir -p ${TEMP_DIR}" | |
| rsync -az --delete \ | |
| --exclude ".git" \ | |
| --exclude ".github/" \ | |
| --exclude ".venv/" \ | |
| --exclude "CosmoView/node_modules/" \ | |
| --exclude "logs/" \ | |
| ./ "${{ env.EC2_USER }}@${{ env.EC2_HOST }}:${TEMP_DIR}/" | |
| # Move from temp to final location with sudo | |
| ssh "${{ env.EC2_USER }}@${{ env.EC2_HOST }}" "sudo rsync -a --delete ${TEMP_DIR}/ ${APP_DIR}/ && rm -rf ${TEMP_DIR}" | |
| - name: Install Python dependencies and restart the service | |
| env: | |
| REMOTE_APP_DIR: ${{ env.APP_DIR }} | |
| REMOTE_PYTHON_BIN: ${{ env.PYTHON_BIN }} | |
| REMOTE_SERVICE: ${{ env.SERVICE_NAME }} | |
| REMOTE_PORT: ${{ env.UVICORN_PORT }} | |
| run: | | |
| set -euo pipefail | |
| APP_DIR="${REMOTE_APP_DIR:-/opt/nasa-sky-explorer}" | |
| PYTHON_BIN="${REMOTE_PYTHON_BIN:-/usr/bin/python3}" | |
| SERVICE_NAME="${REMOTE_SERVICE:-nasaspaceapps}" | |
| UVICORN_PORT="${REMOTE_PORT:-80}" | |
| ssh "${{ env.EC2_USER }}@${{ env.EC2_HOST }}" \ | |
| "cd '${APP_DIR}' && sudo APP_DIR='${APP_DIR}' PYTHON_BIN='${PYTHON_BIN}' SERVICE_NAME='${SERVICE_NAME}' UVICORN_PORT='${UVICORN_PORT}' bash deploy/remote_deploy.sh" |