Skip to content

Commit

Permalink
Merge branch 'main' into ms2/share-modal-improvements-2
Browse files Browse the repository at this point in the history
  • Loading branch information
anishsapkota authored Jan 29, 2025
2 parents 9e6f82c + 2ef48d3 commit 6bb6dbe
Show file tree
Hide file tree
Showing 3 changed files with 235 additions and 233 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/deploy_research.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ jobs:

# Remove the container
- run: ssh $ENV "sudo docker rm $SERVICE_NAME || true"

# Replicate main branch db for research
- run: ssh $ENV "./scripts/replicate_db.sh"
# Restart the container with the new image
- run: ssh $ENV "sudo docker run -d --name $SERVICE_NAME -p 33081:33081 --env-file .env.research -v /opt/proceed-ms-server:/app/volume proceed/ms-server:$MS_TAG"

Expand Down
85 changes: 27 additions & 58 deletions .github/workflows/deploy_with_db.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,15 +214,22 @@ jobs:
echo "diff=false" >> "$GITHUB_OUTPUT"
fi
generate-database-name:
needs: [validate-migrations]
deploy:
runs-on: ubuntu-latest
needs: [buildMS, validate-migrations]
permissions:
contents: read
id-token: write
pull-requests: write
issues: write
environment: Research
env:
MS_TAG: ${{ needs.buildMS.outputs.tag }}
SERVICE_NAME: ${{ inputs.environment == 'Production' && 'ms-server-production' || 'ms-server-staging' }}
SUBDOMAIN: ${{ inputs.environment == 'Production' && 'app' || 'staging' }}
ENV: Research
outputs:
db_name: ${{ steps.generate-name.outputs.DB_NAME }}
steps:
# Database name generation step
- name: Generate sanitized database name
id: generate-name
run: |
Expand All @@ -241,6 +248,7 @@ jobs:
echo "Generated database name: $DB_NAME"
echo "DB_NAME=$DB_NAME" >> "$GITHUB_OUTPUT"
# SSH Configuration step
- name: Configure SSH
run: |
mkdir -p ~/.ssh/
Expand All @@ -258,76 +266,52 @@ jobs:
SSH_KEY: ${{ secrets.SSH_KEY }}
SSH_HOST: ${{ secrets.SSH_HOST }}

# Database lifecycle management step
- name: Manage database lifecycle
run: |
DB_EXISTS=$(ssh $ENV "docker exec ${{ env.DB_CONTAINER }} \
psql -U ${{ secrets.DB_USER }} \
-d ${{ env.DEFAULT_DB }} \
-tAc \"SELECT 1 FROM pg_database WHERE datname='${{ steps.generate-name.outputs.DB_NAME }}'\"")
psql -U ${{ secrets.DB_USER }} \
-d ${{ env.DEFAULT_DB }} \
-tAc \"SELECT 1 FROM pg_database WHERE datname='${{ steps.generate-name.outputs.DB_NAME }}'\"")
if [[ "${{ needs.validate-migrations.outputs.main_diff }}" = "true" && \
"${{ needs.validate-migrations.outputs.branch_diff }}" = "true" ]]; then
echo "Dropping existing database due to migration changes"
ssh $ENV \
"docker exec ${{ env.DB_CONTAINER }} \
psql -U ${{ secrets.DB_USER }} \
-d ${{ env.DEFAULT_DB }} \
-c 'DROP DATABASE IF EXISTS \"${{ steps.generate-name.outputs.DB_NAME }}\"'"
psql -U ${{ secrets.DB_USER }} \
-d ${{ env.DEFAULT_DB }} \
-c 'DROP DATABASE IF EXISTS \"${{ steps.generate-name.outputs.DB_NAME }}\"'"
elif [ "$DB_EXISTS" = "1" ]; then
echo "Reusing existing database"
else
echo "Database will be created in subsequent step"
fi
deploy-database:
needs: [generate-database-name, validate-migrations]
runs-on: ubuntu-latest
environment: Research
env:
ENV: Research
outputs:
database_url: ${{ steps.configure-connection.outputs.DATABASE_URL }}
steps:
- name: Configure SSH
run: |
mkdir -p ~/.ssh/
echo "$SSH_KEY" > ~/.ssh/$ENV.key
chmod 600 ~/.ssh/$ENV.key
cat >>~/.ssh/config <<END
Host $ENV
HostName $SSH_HOST
User $SSH_USER
IdentityFile ~/.ssh/$ENV.key
StrictHostKeyChecking no
END
env:
SSH_USER: ${{ secrets.SSH_USER }}
SSH_KEY: ${{ secrets.SSH_KEY }}
SSH_HOST: ${{ secrets.SSH_HOST }}

# Database deployment steps
- name: Verify database status
id: db-status
run: |
DB_EXISTS=$(ssh $ENV \
"docker exec ${{ env.DB_CONTAINER }} \
psql -U ${{ secrets.DB_USER }} \
-d ${{ env.DEFAULT_DB }} \
-tAc \"SELECT 1 FROM pg_database WHERE datname='${{ needs.generate-database-name.outputs.db_name }}'\"")
psql -U ${{ secrets.DB_USER }} \
-d ${{ env.DEFAULT_DB }} \
-tAc \"SELECT 1 FROM pg_database WHERE datname='${{ steps.generate-name.outputs.DB_NAME }}'\"")
echo "create_db=$([[ "$DB_EXISTS" != "1" ]] && echo 'true' || echo 'false')" >> "$GITHUB_OUTPUT"
- name: Create database if needed
if: steps.db-status.outputs.create_db == 'true'
run: |
ssh $ENV \
"docker exec ${{ env.DB_CONTAINER }} \
psql -U ${{ secrets.DB_USER }} \
-d ${{ env.DEFAULT_DB }} \
-c 'CREATE DATABASE \"${{ needs.generate-database-name.outputs.db_name }}\"'"
psql -U ${{ secrets.DB_USER }} \
-d ${{ env.DEFAULT_DB }} \
-c 'CREATE DATABASE \"${{ steps.generate-name.outputs.DB_NAME }}\"'"
- name: Configure database connection
id: configure-connection
run: |
echo "DATABASE_URL=postgresql://${{ secrets.DB_USER }}:${{secrets.DB_PASSWORD}}@${{ secrets.SSH_HOST }}:5433/${{ needs.generate-database-name.outputs.db_name }}?schema=public" >> "$GITHUB_OUTPUT"
echo "DATABASE_URL=postgresql://${{ secrets.DB_USER }}:${{secrets.DB_PASSWORD}}@${{ secrets.SSH_HOST }}:5433/${{ steps.generate-name.outputs.DB_NAME }}?schema=public" >> "$GITHUB_OUTPUT"
- name: Restore Cache
uses: actions/cache@v4
Expand All @@ -344,21 +328,6 @@ jobs:
run: |
yarn dev-ms-db-deploy
deploy:
runs-on: ubuntu-latest
needs: [buildMS, generate-database-name, deploy-database]
permissions:
contents: read
id-token: write
pull-requests: write
issues: write
environment: Research
env:
MS_TAG: ${{ needs.buildMS.outputs.tag }}
SERVICE_NAME: ${{ inputs.environment == 'Production' && 'ms-server-production' || 'ms-server-staging' }}
SUBDOMAIN: ${{ inputs.environment == 'Production' && 'app' || 'staging' }}
DATABASE_URL: postgresql://${{ secrets.DB_USER }}:${{secrets.DB_PASSWORD}}@${{ secrets.SSH_HOST }}:5433/${{ needs.generate-database-name.outputs.db_name }}?schema=public
steps:
- uses: 'google-github-actions/auth@v2'
with:
project_id: 'proceed-bpms'
Expand Down
Loading

0 comments on commit 6bb6dbe

Please sign in to comment.