2023-12-12 15:51:28 -08:00
# 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.
2023-05-03 05:04:16 -07:00
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 :
2023-10-19 10:05:38 -07:00
- uses : actions/checkout@v4.1.1
2023-05-03 05:04:16 -07:00
with :
persist-credentials : false
fetch-depth : 0
# Setup gcloud CLI
- name : Authenticate to Google Cloud
id : auth
2024-03-01 16:49:43 -08:00
uses : google-github-actions/auth@v2.1.2
2023-05-03 05:04:16 -07:00
with :
retries : '3'
workload_identity_provider : '${{ vars.GCP_WIF }}'
service_account : '${{ vars.GCP_DEPLOYMENTS_SA }}'
- name : Set up Cloud SDK
2024-01-24 16:56:50 -08:00
uses : google-github-actions/setup-gcloud@v2.1.0
2023-05-03 05:04:16 -07:00
# 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
2023-12-12 15:51:28 -08:00
env :
GITHUB_WORKSPACE : ${{ env.GITHUB_WORKSPACE }}
NETWORK : ${{ env.NETWORK }} # use lowercase version from env, not input
2024-01-07 15:26:17 -08:00
# 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.
2023-05-03 05:04:16 -07:00
run : |
2024-01-07 15:26:17 -08:00
# ./.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