Deploy Data #31
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: 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}" |