101 lines
5.2 KiB
YAML
101 lines
5.2 KiB
YAML
# Check if Cached State Disks Exist Workflow
|
|
# This workflow is designed to check the availability of cached state disks in Google Cloud Platform (GCP) for different types of Zcash applications.
|
|
# - Accepts network type as input to determine which disks to search for.
|
|
# - Checks for the existence of three types of disks: lightwalletd tip, Zebra tip, and Zebra checkpoint.
|
|
# - Uses Google Cloud SDK to query and identify available disks based on network and version.
|
|
# - Outputs the availability of each disk type, which can be utilized in subsequent workflows.
|
|
# The workflow streamlines the process of verifying disk availability, crucial for optimizing and speeding up integration tests and deployments.
|
|
name: Check if cached state disks exist
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
network:
|
|
description: 'The Zcash network used to look up the disks'
|
|
required: true
|
|
type: string
|
|
outputs:
|
|
lwd_tip_disk:
|
|
description: 'true if there is a lightwalletd and Zebra cached state disk, synced near the chain tip'
|
|
value: ${{ jobs.get-available-disks.outputs.lwd_tip_disk }}
|
|
zebra_tip_disk:
|
|
description: 'true if there is a Zebra cached state disk synced near the chain tip'
|
|
value: ${{ jobs.get-available-disks.outputs.zebra_tip_disk }}
|
|
zebra_checkpoint_disk:
|
|
description: 'true if there is a Zebra cached state disk synced to the mandatory Zebra checkpoint'
|
|
value: ${{ jobs.get-available-disks.outputs.zebra_checkpoint_disk }}
|
|
|
|
jobs:
|
|
get-available-disks:
|
|
name: Check if cached state disks exist
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
lwd_tip_disk: ${{ steps.get-available-disks.outputs.lwd_tip_disk }}
|
|
zebra_tip_disk: ${{ steps.get-available-disks.outputs.zebra_tip_disk }}
|
|
zebra_checkpoint_disk: ${{ steps.get-available-disks.outputs.zebra_checkpoint_disk }}
|
|
permissions:
|
|
contents: 'read'
|
|
id-token: 'write'
|
|
steps:
|
|
- uses: actions/checkout@v4.1.7
|
|
with:
|
|
persist-credentials: false
|
|
fetch-depth: 0
|
|
|
|
# Setup gcloud CLI
|
|
- name: Authenticate to Google Cloud
|
|
id: auth
|
|
uses: google-github-actions/auth@v2.1.5
|
|
with:
|
|
workload_identity_provider: '${{ vars.GCP_WIF }}'
|
|
service_account: '${{ vars.GCP_DEPLOYMENTS_SA }}'
|
|
|
|
- name: Set up Cloud SDK
|
|
uses: google-github-actions/setup-gcloud@v2.1.1
|
|
|
|
# Disk images in GCP are required to be in lowercase, but the blockchain network
|
|
# uses sentence case, so we need to downcase ${{ inputs.network }}
|
|
#
|
|
# Passes a lowercase Network name to subsequent steps using $NETWORK env variable
|
|
- name: Downcase network name for disks
|
|
run: |
|
|
NETWORK_CAPS=${{ inputs.network }}
|
|
echo "NETWORK=${NETWORK_CAPS,,}" >> $GITHUB_ENV
|
|
|
|
# Check if there are cached state disks available for subsequent jobs to use.
|
|
- name: Check if cached state disks exist
|
|
id: get-available-disks
|
|
env:
|
|
GITHUB_WORKSPACE: ${{ env.GITHUB_WORKSPACE }}
|
|
NETWORK: ${{ env.NETWORK }} # use lowercase version from env, not input
|
|
# TODO: Use the `gcp-get-available-disks.sh` script instead of the inline script,
|
|
# as this is crashing. And it might related to the returned JSON values.
|
|
run: |
|
|
# ./.github/workflows/scripts/gcp-get-available-disks.sh
|
|
LOCAL_STATE_VERSION=$(grep -oE "DATABASE_FORMAT_VERSION: .* [0-9]+" "$GITHUB_WORKSPACE/zebra-state/src/constants.rs" | grep -oE "[0-9]+" | tail -n1)
|
|
echo "STATE_VERSION: $LOCAL_STATE_VERSION"
|
|
LWD_TIP_DISK=$(gcloud compute images list --filter="status=READY AND name~lwd-cache-.+-[0-9a-f]+-v${LOCAL_STATE_VERSION}-${NETWORK}-tip" --format="value(NAME)" --sort-by=~creationTimestamp --limit=1)
|
|
if [[ -z "$LWD_TIP_DISK" ]]; then
|
|
echo "No TIP disk found for lightwalletd on network: ${NETWORK}"
|
|
echo "lwd_tip_disk=${{ toJSON(false) }}" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Disk: $LWD_TIP_DISK"
|
|
echo "lwd_tip_disk=${{ toJSON(true) }}" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
ZEBRA_TIP_DISK=$(gcloud compute images list --filter="status=READY AND name~zebrad-cache-.+-[0-9a-f]+-v${LOCAL_STATE_VERSION}-${NETWORK}-tip" --format="value(NAME)" --sort-by=~creationTimestamp --limit=1)
|
|
if [[ -z "$ZEBRA_TIP_DISK" ]]; then
|
|
echo "No TIP disk found for Zebra on network: ${NETWORK}"
|
|
echo "zebra_tip_disk=${{ toJSON(false) }}" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Disk: $ZEBRA_TIP_DISK"
|
|
echo "zebra_tip_disk=${{ toJSON(true) }}" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
ZEBRA_CHECKPOINT_DISK=$(gcloud compute images list --filter="status=READY AND name~zebrad-cache-.+-[0-9a-f]+-v${LOCAL_STATE_VERSION}-${NETWORK}-checkpoint" --format="value(NAME)" --sort-by=~creationTimestamp --limit=1)
|
|
if [[ -z "$ZEBRA_CHECKPOINT_DISK" ]]; then
|
|
echo "No CHECKPOINT disk found for Zebra on network: ${NETWORK}"
|
|
echo "zebra_checkpoint_disk=${{ toJSON(false) }}" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Disk: $ZEBRA_CHECKPOINT_DISK"
|
|
echo "zebra_checkpoint_disk=${{ toJSON(true) }}" >> "$GITHUB_OUTPUT"
|
|
fi
|