Skip to content

Deploy Data

Deploy Data #31

name: Deploy Data
on: workflow_dispatch
env:
GCLOUD_PROJECT_ID: ${{ secrets.GCLOUD_PROJECT_ID }}
GCLOUD_REGION: us-east1
GCLOUD_GCR: us-docker.pkg.dev
GCLOUD_REGISTRY_PROJECT_ID: ${{ secrets.GCLOUD_REGISTRY_PROJECT_ID }}
GCLOUD_REGISTRY_IMAGE_ENV: docker
GCLOUD_REGISTRY_IMAGE_PROJECT: ontology
SERVICE_NAME: ontology-annotation-network
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: temurin
- name: Authenticate to Google Cloud
uses: 'google-github-actions/auth@v1'
with:
credentials_json: '${{ secrets.GCLOUD_SA_KEY }}'
- name: Setup Google Cloud CLI
uses: 'google-github-actions/setup-gcloud@v1'
- name: Get project version
run: |
echo "PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
- name: Set our docker image name
run: |
echo "DOCKER_IMAGE=$GCLOUD_GCR/$GCLOUD_REGISTRY_PROJECT_ID/$GCLOUD_REGISTRY_IMAGE_ENV/$GCLOUD_REGISTRY_IMAGE_PROJECT/$SERVICE_NAME" >> $GITHUB_ENV
- name: Docker Login
run: |
gcloud auth configure-docker "${GCLOUD_GCR}"
- name: Maven Package ETL Only
run: mvn package -pl oan-etl -am -DskipTests=true
- name: Start our builder database container
run: |
docker pull neo4j:community-bullseye
docker run -d --name=builder-neo4j -p7474:7474 -p7687:7687 -v ./neo4j/data:/data --env NEO4J_AUTH=neo4j/password neo4j:community-bullseye
- name: Fetch our data
run: sh oan-etl/update.sh oan-etl/data/
- name: Load our neo4j data
run: |
java -jar oan-etl/target/oan-etl-${PROJECT_VERSION}.jar -d=oan-etl/data
docker stop builder-neo4j
- name: Migrate data to GCS w/backup
run: |
gsutil -m rm -r gs://jax-robinson-ontology-annotation-network-data/backup/
gsutil -m cp -r gs://jax-robinson-ontology-annotation-network-data/data/* gs://jax-robinson-ontology-annotation-network-data/backup/
gsutil -m rm -r gs://jax-robinson-ontology-annotation-network-data/data/
gsutil -m cp -r ./neo4j/data/* gs://jax-robinson-ontology-annotation-network-data/data/
- name: Stop prod container, Swap disk to loader
id: swap1
run: |
# Stop the instance
gcloud compute instances stop ontology-annotation-network-containerized --project=$GCLOUD_PROJECT_ID --zone=us-east1-b
# Detach disk
gcloud compute instances detach-disk ontology-annotation-network-containerized --disk=graph-data --zone=us-east1-b
# Attach disk to loader
gcloud compute instances attach-disk ontology-annotation-loader --disk=graph-data --device-name=graph-data --zone=us-east1-b
# turn on loader
gcloud compute instances start ontology-annotation-loader --project=$GCLOUD_PROJECT_ID --zone=us-east1-b
- name: Sleep for startup script time
run: sleep 15
- name: Stop loader container, Swap disk to prod
id: swap2
run: |
# turn off loader
gcloud compute instances stop ontology-annotation-loader --project=$GCLOUD_PROJECT_ID --zone=us-east1-b
# detach disk
gcloud compute instances detach-disk ontology-annotation-loader --disk=graph-data --zone=us-east1-b
# re-attach disk
gcloud compute instances attach-disk ontology-annotation-network-containerized --device-name=graph-data --disk=graph-data --zone=us-east1-b
# turn on instance
gcloud compute instances start ontology-annotation-network-containerized --project=$GCLOUD_PROJECT_ID --zone=us-east1-b
# - name: Sleep for startup script time
# run: sleep 30
#
# - name: Redeploy Rest
# run: |
# gcloud run deploy ontology-annotation-network-rest --quiet \
# --image "us-docker.pkg.dev/jax-cs-registry/docker/ontology/ontology-annotation-network-rest:latest" --project "${GCLOUD_PROJECT_ID}" \
# --region "${GCLOUD_REGION}" --platform managed --allow-unauthenticated --format json \
# --memory 4Gi --cpu 2 --min-instances 1 --max-instances 5 --no-cpu-throttling --ingress internal-and-cloud-load-balancing --service-account "${GCLOUD_SERVICE_ACCOUNT}"