# 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.1 with: persist-credentials: false fetch-depth: 0 # Setup gcloud CLI - name: Authenticate to Google Cloud id: auth uses: google-github-actions/auth@v2.1.2 with: retries: '3' 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.0 # 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