forked from linera-io/linera-protocol
-
Notifications
You must be signed in to change notification settings - Fork 0
151 lines (124 loc) · 6.19 KB
/
docker_image.yml
File metadata and controls
151 lines (124 loc) · 6.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
name: Docker Image
on:
push:
branches: [ 'devnet_*', 'testnet_*' ]
workflow_dispatch:
permissions:
contents: read
jobs:
build-and-push:
runs-on: ubuntu-latest
timeout-minutes: 40
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Auth service account
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_SA_ACTIONS_RUNNER_KEY }}
- name: Set up Google Cloud SDK
uses: google-github-actions/setup-gcloud@v1
- name: Set env variables
run: |
# Set basic variables
if [ -n "${{ github.head_ref }}" ]; then
BRANCH_NAME="${{ github.head_ref }}"
else
BRANCH_NAME="${{ github.ref_name }}"
fi
echo "GIT_COMMIT_SHORT=${GITHUB_SHA:0:7}" >> $GITHUB_ENV
echo "GIT_COMMIT_LONG=${GITHUB_SHA}" >> $GITHUB_ENV
echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV
echo "BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_ENV
# Image registry base
REGISTRY_BASE="us-docker.pkg.dev/linera-io-dev/linera-public-registry"
LINERA_IMAGE_NAME="linera"
INDEXER_IMAGE_NAME="linera-indexer"
EXPLORER_IMAGE_NAME="linera-explorer"
# Main linera image names
echo "LINERA_IMAGE_BRANCH=${REGISTRY_BASE}/${LINERA_IMAGE_NAME}:${BRANCH_NAME}" >> $GITHUB_ENV
echo "LINERA_IMAGE_SHORT=${REGISTRY_BASE}/${LINERA_IMAGE_NAME}:${GITHUB_SHA:0:7}" >> $GITHUB_ENV
echo "LINERA_IMAGE_LONG=${REGISTRY_BASE}/${LINERA_IMAGE_NAME}:${GITHUB_SHA}" >> $GITHUB_ENV
# Indexer image names
echo "INDEXER_IMAGE_BRANCH=${REGISTRY_BASE}/${INDEXER_IMAGE_NAME}:${BRANCH_NAME}" >> $GITHUB_ENV
echo "INDEXER_IMAGE_SHORT=${REGISTRY_BASE}/${INDEXER_IMAGE_NAME}:${GITHUB_SHA:0:7}" >> $GITHUB_ENV
echo "INDEXER_IMAGE_LONG=${REGISTRY_BASE}/${INDEXER_IMAGE_NAME}:${GITHUB_SHA}" >> $GITHUB_ENV
# Explorer image names
echo "EXPLORER_IMAGE_BRANCH=${REGISTRY_BASE}/${EXPLORER_IMAGE_NAME}:${BRANCH_NAME}" >> $GITHUB_ENV
echo "EXPLORER_IMAGE_SHORT=${REGISTRY_BASE}/${EXPLORER_IMAGE_NAME}:${GITHUB_SHA:0:7}" >> $GITHUB_ENV
echo "EXPLORER_IMAGE_LONG=${REGISTRY_BASE}/${EXPLORER_IMAGE_NAME}:${GITHUB_SHA}" >> $GITHUB_ENV
- name: Build and push all images in parallel using GCP Cloud Build
run: |
set -e
echo "Submitting all three builds to GCP Cloud Build..."
# Submit main linera image build and capture build ID
BUILD_ID_1=$(gcloud builds submit . \
--config=docker/build-image.yaml \
--substitutions="_IMAGE_PATH=${{ env.LINERA_IMAGE_BRANCH }},_IMAGE_NAME_SHORT_COMMIT=${{ env.LINERA_IMAGE_SHORT }},_IMAGE_NAME_LONG_COMMIT=${{ env.LINERA_IMAGE_LONG }},_GIT_COMMIT=${{ env.GIT_COMMIT_LONG }},_BUILD_DATE=${{ env.BUILD_DATE }},_BUILD_FLAG=--release,_BUILD_FOLDER=release" \
--timeout=3h \
--machine-type=e2-highcpu-32 \
--async \
--format="value(id)")
echo "Linera build submitted: $BUILD_ID_1"
# Submit indexer image build and capture build ID
BUILD_ID_2=$(gcloud builds submit . \
--config=docker/build-indexer-image.yaml \
--substitutions="_IMAGE_PATH=${{ env.INDEXER_IMAGE_BRANCH }},_IMAGE_NAME_SHORT_COMMIT=${{ env.INDEXER_IMAGE_SHORT }},_IMAGE_NAME_LONG_COMMIT=${{ env.INDEXER_IMAGE_LONG }},_GIT_COMMIT=${{ env.GIT_COMMIT_LONG }},_BUILD_DATE=${{ env.BUILD_DATE }},_BUILD_FLAG=--release,_BUILD_FOLDER=release" \
--timeout=3h \
--machine-type=e2-highcpu-32 \
--async \
--format="value(id)")
echo "Indexer build submitted: $BUILD_ID_2"
# Submit explorer image build and capture build ID
BUILD_ID_3=$(gcloud builds submit . \
--config=docker/build-explorer-image.yaml \
--substitutions="_IMAGE_PATH=${{ env.EXPLORER_IMAGE_BRANCH }},_IMAGE_NAME_SHORT_COMMIT=${{ env.EXPLORER_IMAGE_SHORT }},_IMAGE_NAME_LONG_COMMIT=${{ env.EXPLORER_IMAGE_LONG }},_GIT_COMMIT=${{ env.GIT_COMMIT_LONG }},_BUILD_DATE=${{ env.BUILD_DATE }},_BUILD_FLAG=--release,_BUILD_FOLDER=release" \
--timeout=3h \
--machine-type=e2-highcpu-32 \
--async \
--format="value(id)")
echo "Explorer build submitted: $BUILD_ID_3"
echo ""
echo "All three builds submitted. Now streaming logs and waiting for completion..."
echo ""
# Function to stream logs and wait for build completion
# gcloud builds log --stream waits for the build to complete and returns proper exit codes
stream_build_logs() {
local BUILD_ID=$1
local BUILD_NAME=$2
echo "========================================"
echo "Streaming logs for $BUILD_NAME (ID: $BUILD_ID)"
echo "========================================"
# Stream logs - this will wait for build completion and return exit code
gcloud builds log "$BUILD_ID" --stream
local EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
echo ""
echo "$BUILD_NAME completed successfully"
else
echo ""
echo "$BUILD_NAME failed (exit code: $EXIT_CODE)"
echo "Logs: https://console.cloud.google.com/cloud-build/builds/$BUILD_ID?project=linera-io-dev"
fi
return $EXIT_CODE
}
# Stream all three builds in parallel
stream_build_logs "$BUILD_ID_1" "Linera build" &
PID1=$!
stream_build_logs "$BUILD_ID_2" "Indexer build" &
PID2=$!
stream_build_logs "$BUILD_ID_3" "Explorer build" &
PID3=$!
# Wait for all background jobs and check exit codes
EXIT_CODE=0
wait $PID1 || EXIT_CODE=$?
wait $PID2 || EXIT_CODE=$?
wait $PID3 || EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo ""
echo "One or more image builds failed"
exit $EXIT_CODE
fi
echo ""
echo "All three image builds completed successfully!"