fix(ci): Expand cached state disks before running tests (#4962)
* Expand cached state disks before running tests * Install partition management tool * There isn't actually a partition on the cached state image * Make e2fsck non-interactive * Limit the length of image names to 63 characters * Ignore possibly long branch names when matching images, just match the commit
This commit is contained in:
parent
156fc2b93d
commit
6fd3cdb3da
|
|
@ -148,6 +148,9 @@ jobs:
|
||||||
--zone ${{ env.ZONE }}
|
--zone ${{ env.ZONE }}
|
||||||
sleep 60
|
sleep 60
|
||||||
|
|
||||||
|
# Create a docker volume with the new disk we just created.
|
||||||
|
#
|
||||||
|
# SSH into the just created VM, and create a docker volume with the newly created disk.
|
||||||
- name: Create ${{ inputs.test_id }} Docker volume
|
- name: Create ${{ inputs.test_id }} Docker volume
|
||||||
run: |
|
run: |
|
||||||
gcloud compute ssh \
|
gcloud compute ssh \
|
||||||
|
|
@ -157,7 +160,7 @@ jobs:
|
||||||
--ssh-flag="-o ServerAliveInterval=5" \
|
--ssh-flag="-o ServerAliveInterval=5" \
|
||||||
--command \
|
--command \
|
||||||
"\
|
"\
|
||||||
sudo mkfs.ext4 /dev/sdb \
|
sudo mkfs.ext4 -v /dev/sdb \
|
||||||
&& \
|
&& \
|
||||||
docker volume create --driver local --opt type=ext4 --opt device=/dev/sdb \
|
docker volume create --driver local --opt type=ext4 --opt device=/dev/sdb \
|
||||||
${{ inputs.test_id }}-${{ env.GITHUB_SHA_SHORT }} \
|
${{ inputs.test_id }}-${{ env.GITHUB_SHA_SHORT }} \
|
||||||
|
|
@ -285,11 +288,16 @@ jobs:
|
||||||
DISK_PREFIX=${{ inputs.zebra_state_dir || inputs.disk_prefix }}
|
DISK_PREFIX=${{ inputs.zebra_state_dir || inputs.disk_prefix }}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Try to find an image generated from this branch and commit
|
# Try to find an image generated from a previous step or run of this commit.
|
||||||
# Fields are listed in the "Create image from state disk" step
|
# Fields are listed in the "Create image from state disk" step.
|
||||||
COMMIT_DISK_PREFIX="${DISK_PREFIX}-${GITHUB_REF_SLUG_URL}-${GITHUB_SHA_SHORT}-v${LOCAL_STATE_VERSION}-${NETWORK}-${{ inputs.disk_suffix }}"
|
#
|
||||||
|
# We can't match the full branch name here,
|
||||||
|
# because it might have been shortened for the image.
|
||||||
|
#
|
||||||
|
# The probability of two matching short commit hashes within the same month is very low.
|
||||||
|
COMMIT_DISK_PREFIX="${DISK_PREFIX}-.+-${{ env.GITHUB_SHA_SHORT }}-v${LOCAL_STATE_VERSION}-${NETWORK}-${{ inputs.disk_suffix }}"
|
||||||
COMMIT_CACHED_DISK_NAME=$(gcloud compute images list --filter="name~${COMMIT_DISK_PREFIX}" --format="value(NAME)" --sort-by=~creationTimestamp --limit=1)
|
COMMIT_CACHED_DISK_NAME=$(gcloud compute images list --filter="name~${COMMIT_DISK_PREFIX}" --format="value(NAME)" --sort-by=~creationTimestamp --limit=1)
|
||||||
echo "${GITHUB_REF_SLUG_URL}-${GITHUB_SHA_SHORT} Disk: $COMMIT_CACHED_DISK_NAME"
|
echo "${GITHUB_REF_SLUG_URL}-${{ env.GITHUB_SHA_SHORT }} Disk: $COMMIT_CACHED_DISK_NAME"
|
||||||
if [[ -n "$COMMIT_CACHED_DISK_NAME" ]]; then
|
if [[ -n "$COMMIT_CACHED_DISK_NAME" ]]; then
|
||||||
echo "Description: $(gcloud compute images describe $COMMIT_CACHED_DISK_NAME --format='value(DESCRIPTION)')"
|
echo "Description: $(gcloud compute images describe $COMMIT_CACHED_DISK_NAME --format='value(DESCRIPTION)')"
|
||||||
fi
|
fi
|
||||||
|
|
@ -351,7 +359,10 @@ jobs:
|
||||||
|
|
||||||
# Create a docker volume with the selected cached state.
|
# Create a docker volume with the selected cached state.
|
||||||
#
|
#
|
||||||
# SSH into the just created VM, and create a docker volume with the recently attached disk.
|
# SSH into the just created VM, expand the partition and filesystem to fill the entire disk,
|
||||||
|
# then create a docker volume with the recently attached disk.
|
||||||
|
# (The cached state and disk are usually the same size,
|
||||||
|
# but the cached state can be smaller if we just increased the disk size.)
|
||||||
- name: Create ${{ inputs.test_id }} Docker volume
|
- name: Create ${{ inputs.test_id }} Docker volume
|
||||||
run: |
|
run: |
|
||||||
gcloud compute ssh \
|
gcloud compute ssh \
|
||||||
|
|
@ -361,6 +372,10 @@ jobs:
|
||||||
--ssh-flag="-o ServerAliveInterval=5" \
|
--ssh-flag="-o ServerAliveInterval=5" \
|
||||||
--command \
|
--command \
|
||||||
"\
|
"\
|
||||||
|
sudo e2fsck -v -f -p /dev/sdb \
|
||||||
|
&& \
|
||||||
|
sudo resize2fs -p /dev/sdb \
|
||||||
|
&& \
|
||||||
docker volume create --driver local --opt type=ext4 --opt device=/dev/sdb \
|
docker volume create --driver local --opt type=ext4 --opt device=/dev/sdb \
|
||||||
${{ inputs.test_id }}-${{ env.GITHUB_SHA_SHORT }} \
|
${{ inputs.test_id }}-${{ env.GITHUB_SHA_SHORT }} \
|
||||||
"
|
"
|
||||||
|
|
@ -1000,14 +1015,22 @@ jobs:
|
||||||
with:
|
with:
|
||||||
short-length: 7
|
short-length: 7
|
||||||
|
|
||||||
# Disk images in GCP are required to be in lowercase, but the blockchain network
|
# Performs formatting on disk name components.
|
||||||
# uses sentence case, so we need to downcase ${{ inputs.network }}
|
|
||||||
#
|
#
|
||||||
# Passes ${{ inputs.network }} to subsequent steps using $NETWORK env variable
|
# Disk images in GCP are required to be in lowercase, but the blockchain network
|
||||||
- name: Downcase network name for disks
|
# uses sentence case, so we need to downcase ${{ inputs.network }}.
|
||||||
|
#
|
||||||
|
# Disk image names in GCP are limited to 63 characters, so we need to limit
|
||||||
|
# branch names to 13 characters.
|
||||||
|
#
|
||||||
|
# Passes ${{ inputs.network }} to subsequent steps using $NETWORK env variable.
|
||||||
|
# Passes ${{ env.GITHUB_REF_SLUG_URL }} to subsequent steps using $SHORT_GITHUB_REF env variable.
|
||||||
|
- name: Format network name and branch name for disks
|
||||||
run: |
|
run: |
|
||||||
NETWORK_CAPS=${{ inputs.network }}
|
NETWORK_CAPS=${{ inputs.network }}
|
||||||
echo "NETWORK=${NETWORK_CAPS,,}" >> $GITHUB_ENV
|
echo "NETWORK=${NETWORK_CAPS,,}" >> $GITHUB_ENV
|
||||||
|
LONG_GITHUB_REF=${{ env.GITHUB_REF_SLUG_URL }}
|
||||||
|
echo "SHORT_GITHUB_REF=${LONG_GITHUB_REF:0:13}" >> $GITHUB_ENV
|
||||||
|
|
||||||
# Setup gcloud CLI
|
# Setup gcloud CLI
|
||||||
- name: Authenticate to Google Cloud
|
- name: Authenticate to Google Cloud
|
||||||
|
|
@ -1052,7 +1075,7 @@ jobs:
|
||||||
SYNC_HEIGHT=$(echo $DOCKER_LOGS | grep -oE '${{ inputs.height_grep_text }}\([0-9]+\)' | grep -oE '[0-9]+' | tail -1 || [[ $? == 1 ]])
|
SYNC_HEIGHT=$(echo $DOCKER_LOGS | grep -oE '${{ inputs.height_grep_text }}\([0-9]+\)' | grep -oE '[0-9]+' | tail -1 || [[ $? == 1 ]])
|
||||||
echo "SYNC_HEIGHT=$SYNC_HEIGHT" >> $GITHUB_ENV
|
echo "SYNC_HEIGHT=$SYNC_HEIGHT" >> $GITHUB_ENV
|
||||||
|
|
||||||
# Sets the $UPDATE_SUFFIX env var to "-update" if using cached state,
|
# Sets the $UPDATE_SUFFIX env var to "-u" if using cached state,
|
||||||
# and the empty string otherwise.
|
# and the empty string otherwise.
|
||||||
#
|
#
|
||||||
# Also sets a unique date and time suffix $TIME_SUFFIX.
|
# Also sets a unique date and time suffix $TIME_SUFFIX.
|
||||||
|
|
@ -1061,26 +1084,32 @@ jobs:
|
||||||
UPDATE_SUFFIX=""
|
UPDATE_SUFFIX=""
|
||||||
|
|
||||||
if [[ "${{ inputs.needs_zebra_state }}" == "true" ]]; then
|
if [[ "${{ inputs.needs_zebra_state }}" == "true" ]]; then
|
||||||
UPDATE_SUFFIX="-update"
|
UPDATE_SUFFIX="-u"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
TIME_SUFFIX=$(date '+%Y-%m-%d-%H-%M-%S' --utc)
|
# We're going to delete old images after a month, so we don't need the year here
|
||||||
|
TIME_SUFFIX=$(date '+%m%d%H%M%S' --utc)
|
||||||
|
|
||||||
echo "UPDATE_SUFFIX=$UPDATE_SUFFIX" >> $GITHUB_ENV
|
echo "UPDATE_SUFFIX=$UPDATE_SUFFIX" >> $GITHUB_ENV
|
||||||
echo "TIME_SUFFIX=$TIME_SUFFIX" >> $GITHUB_ENV
|
echo "TIME_SUFFIX=$TIME_SUFFIX" >> $GITHUB_ENV
|
||||||
|
|
||||||
# Create an image from disk that will be used for following/other tests
|
# Create an image from disk that will be used for following/other tests.
|
||||||
|
#
|
||||||
# This image can contain:
|
# This image can contain:
|
||||||
# - Zebra cached state
|
# - Zebra cached state
|
||||||
# - Zebra + lightwalletd cached state
|
# - Zebra + lightwalletd cached state
|
||||||
# Which cached state is being saved to the disk is defined by ${{ inputs.disk_prefix }}
|
# Which cached state is being saved to the disk is defined by ${{ inputs.disk_prefix }}.
|
||||||
|
#
|
||||||
|
# The image name must be unique, and be 63 characters or less.
|
||||||
|
# The timestamp makes images from the same commit unique,
|
||||||
|
# as long as they don't finish in the same second.
|
||||||
#
|
#
|
||||||
# Force the image creation (--force) as the disk is still attached even though is not being
|
# Force the image creation (--force) as the disk is still attached even though is not being
|
||||||
# used by the container
|
# used by the container.
|
||||||
- name: Create image from state disk
|
- name: Create image from state disk
|
||||||
run: |
|
run: |
|
||||||
gcloud compute images create \
|
gcloud compute images create \
|
||||||
"${{ inputs.disk_prefix }}-${{ env.GITHUB_REF_SLUG_URL }}-${{ env.GITHUB_SHA_SHORT }}-v${{ env.STATE_VERSION }}-${{ env.NETWORK }}-${{ inputs.disk_suffix }}$UPDATE_SUFFIX-$TIME_SUFFIX" \
|
"${{ inputs.disk_prefix }}-${SHORT_GITHUB_REF}-${{ env.GITHUB_SHA_SHORT }}-v${{ env.STATE_VERSION }}-${{ env.NETWORK }}-${{ inputs.disk_suffix }}${UPDATE_SUFFIX}-${TIME_SUFFIX}" \
|
||||||
--force \
|
--force \
|
||||||
--source-disk=${{ inputs.test_id }}-${{ env.GITHUB_SHA_SHORT }} \
|
--source-disk=${{ inputs.test_id }}-${{ env.GITHUB_SHA_SHORT }} \
|
||||||
--source-disk-zone=${{ env.ZONE }} \
|
--source-disk-zone=${{ env.ZONE }} \
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue