Skip to content

Commit d01523a

Browse files
committed
chore: Add GraalVM to build.sh script
1 parent d6867d9 commit d01523a

File tree

3 files changed

+159
-16
lines changed

3 files changed

+159
-16
lines changed

.github/workflows/tests.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,8 @@ jobs:
142142
POSTGRES_CAS_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CAS_PASS
143143
POSTGRES_CUSTOMER_CAS_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_CONNECTION_NAME
144144
POSTGRES_CUSTOMER_CAS_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_PASS
145-
POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME
146-
POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME
145+
POSTGRES_CUSTOMER_CAS_VALID_DOMAIN_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME
146+
POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME
147147
POSTGRES_MCP_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_MCP_CONNECTION_NAME
148148
POSTGRES_MCP_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_MCP_PASS
149149
SQLSERVER_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/SQLSERVER_CONNECTION_NAME
@@ -170,8 +170,8 @@ jobs:
170170
POSTGRES_CAS_PASS: "${{ steps.secrets.outputs.POSTGRES_CAS_PASS }}"
171171
POSTGRES_CUSTOMER_CAS_CONNECTION_NAME: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_CONNECTION_NAME }}"
172172
POSTGRES_CUSTOMER_CAS_PASS: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_PASS }}"
173-
POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME }}"
174-
POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME }}"
173+
POSTGRES_CUSTOMER_CAS_VALID_DOMAIN_NAME: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_VALID_DOMAIN_NAME }}"
174+
POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME }}"
175175
POSTGRES_MCP_CONNECTION_NAME: "${{ steps.secrets.outputs.POSTGRES_MCP_CONNECTION_NAME }}"
176176
POSTGRES_MCP_PASS: "${{ steps.secrets.outputs.POSTGRES_MCP_PASS }}"
177177
SQLSERVER_CONNECTION_NAME: "${{ steps.secrets.outputs.SQLSERVER_CONNECTION_NAME }}"

build.sh

Lines changed: 151 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,16 @@ function e2e() {
5555
}
5656

5757

58-
## e2e - Runs end-to-end integration tests.
58+
## e2e_graalvm - Runs end-to-end integration tests using graalvm
5959
function e2e_graalvm() {
60+
graalvm_tools
61+
6062
if [[ ! -f .envrc ]] ; then
6163
write_e2e_env .envrc
6264
fi
6365
source .envrc
64-
.github/scripts/run_tests_graalvm_native.sh
66+
export JAVA_HOME=$PWD/.tools/graalvm-ce-jdk-24/Contents/Home
67+
JOB_TYPE=integration .github/scripts/run_tests_graalvm_native.sh
6568
}
6669

6770
## fix - Fixes java code format.
@@ -74,13 +77,150 @@ function lint() {
7477
mvn -P lint install -DskipTests=true
7578
}
7679

80+
function download_and_expand() {
81+
url=$1
82+
tarFile=$2
83+
directory=$3
84+
85+
if [[ ! -f "$tarFile" ]] ; then
86+
curl -L -o "$tarFile" "$url"
87+
fi
88+
if [[ ! -d "$directory" ]] ; then
89+
mkdir -p "$directory"
90+
tar -xf "$tarFile" -C "$directory" --strip-components=1 || (rm "$tarFile" ; exit 1)
91+
fi
92+
}
93+
94+
function graalvm_tools() {
95+
mkdir -p .tools
96+
97+
# Download the GraalVM and unzip into .tools
98+
if [[ $(uname) == "Darwin" ]] ; then
99+
oracle_24_url="https://download.oracle.com/graalvm/24/latest/graalvm-jdk-24_macos-aarch64_bin.tar.gz"
100+
ce_24_url="https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-24.0.2/graalvm-community-jdk-24.0.2_macos-aarch64_bin.tar.gz"
101+
ce_21_url="https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_macos-aarch64_bin.tar.gz"
102+
elif [[ $(uname) == "Linux" ]] ; then
103+
oracle_24_url="https://download.oracle.com/graalvm/24/latest/graalvm-jdk-24_linux-x64_bin.tar.gz"
104+
ce_24_url="https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-24.0.2/graalvm-community-jdk-24.0.2_linux-x64_bin.tar.gz"
105+
ce_21_url="https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_linux-x64_bin.tar.gz"
106+
fi
107+
108+
download_and_expand "$oracle_24_url" ".tools/graalvm_oracle_24.gz" ".tools/graalvm-jdk-24"
109+
download_and_expand "$ce_24_url" ".tools/graalvm_ce_24.gz" ".tools/graalvm-ce-jdk-24"
110+
download_and_expand "$ce_21_url" ".tools/graalvm_ce_21.gz" ".tools/graalvm-ce-jdk-21"
111+
}
112+
113+
# write_e2e_env - Loads secrets from the gcloud project and writes
114+
# them to target/e2e.env to run e2e tests.
115+
#
77116

78117
## deps - updates dependencies to the latest version
79118
function deps() {
80119
mvn versions:use-latest-versions
81120
find . -name 'pom.xml.versionsBackup' -print0 | xargs -0 rm -f
82121
}
83122

123+
function grant_iam_user_pg() {
124+
instance_name=$1
125+
root_user=$2
126+
root_pass=$3
127+
new_iam_user=$4
128+
echo
129+
echo "*"
130+
echo "* Grant access to the database to the current user by executing this sql statement: "
131+
echo "*"
132+
echo "* GRANT ALL ON SCHEMA $POSTGRES_DB TO '$new_iam_user';"
133+
echo "*"
134+
echo "* database password: $root_pass"
135+
echo "*"
136+
echo
137+
gcloud alpha sql connect --project="${TEST_PROJECT}" --user="$root_user" "$instance_name" --database "$POSTGRES_DB"
138+
}
139+
140+
function grant_iam_user_mysql() {
141+
instance_name=$1
142+
root_user=$2
143+
root_pass=$3
144+
new_iam_user=$4
145+
146+
echo
147+
echo "*"
148+
echo "* Grant access to the database to the current user by executing this sql statement: "
149+
echo "*"
150+
echo "* GRANT ALL ON proxy-testing TO $new_iam_user@'%'; FLUSH PRIVILEGES;"
151+
echo "*"
152+
echo "* database password: $root_pass"
153+
echo "*"
154+
gcloud alpha sql connect --project="${TEST_PROJECT}" --user="$root_user" "$instance_name" --database "$MYSQL_DB"
155+
}
156+
157+
## grant_local_iam_user - Logs into each test database and prints out instructions on how to grant
158+
## the currently authenticated gcloud user access to the database schema.
159+
function grant_local_iam_user() {
160+
if [[ ! -f .envrc ]] ; then
161+
write_e2e_env .envrc
162+
fi
163+
source "$SCRIPT_DIR/.envrc"
164+
165+
local_user=$(gcloud auth list --format 'value(account)' | tr -d '\n')
166+
set -x
167+
grant_iam_user_mysql "${MYSQL_MCP_CONNECTION_NAME##*:}" "$MYSQL_USER" "$MYSQL_MCP_PASS" "${local_user%%@*}"
168+
grant_iam_user_mysql "${MYSQL_CONNECTION_NAME##*:}" "$MYSQL_USER" "$MYSQL_PASS" "${local_user%%@*}"
169+
grant_iam_user_pg "${POSTGRES_CONNECTION_NAME##*:}" "$POSTGRES_USER" "$POSTGRES_PASS" "$local_user"
170+
grant_iam_user_pg "${POSTGRES_CAS_CONNECTION_NAME##*:}" "$POSTGRES_CAS_USER" "$POSTGRES_PASS" "$local_user"
171+
grant_iam_user_pg "${POSTGRES_MCP_CONNECTION_NAME##*:}" "$POSTGRES_MCP_USER" "$POSTGRES_PASS" "$local_user"
172+
}
173+
174+
## add_local_iam_user - Adds the currently authenticated gcloud user to all IAM test databases
175+
function add_local_iam_user() {
176+
if [[ ! -f .envrc ]] ; then
177+
write_e2e_env .envrc
178+
fi
179+
source "$SCRIPT_DIR/.envrc"
180+
181+
local_user=$(gcloud auth list --format 'value(account)' | tr -d '\n')
182+
183+
mysql_instances=( "${MYSQL_CONNECTION_NAME##*:}"
184+
"${MYSQL_MCP_CONNECTION_NAME##*:}" )
185+
186+
pg_instances=(
187+
"${POSTGRES_CAS_CONNECTION_NAME##*:}"
188+
"${POSTGRES_CONNECTION_NAME##*:}"
189+
"${POSTGRES_MCP_CONNECTION_NAME##*:}"
190+
)
191+
192+
for inst in "${mysql_instances[@]}" ; do
193+
if gcloud sql users describe "${local_user%%@*}" \
194+
--host=% \
195+
--instance="$inst" \
196+
--project="${TEST_PROJECT}" > /dev/null 2>&1 ; then
197+
echo "user %local_user exists in $inst"
198+
else
199+
gcloud sql users create "$local_user" \
200+
--instance="$inst" \
201+
--host=% \
202+
--type=cloud_iam_user \
203+
--project="${TEST_PROJECT}"
204+
fi
205+
done
206+
207+
for inst in "${pg_instances[@]}" ; do
208+
if gcloud sql users describe "$local_user" \
209+
--host=% \
210+
--instance="$inst" \
211+
--project="${TEST_PROJECT}" > /dev/null 2>&1 ; then
212+
echo "user %local_user exists in $inst"
213+
else
214+
gcloud sql users create "$local_user" \
215+
--instance="$inst" \
216+
--host=% \
217+
--type=cloud_iam_user \
218+
--project="${TEST_PROJECT}"
219+
fi
220+
export PGPASSWORD=
221+
gcloud sql connect -u
222+
done
223+
}
84224

85225
# write_e2e_env - Loads secrets from the gcloud project and writes
86226
# them to target/e2e.env to run e2e tests.
@@ -90,23 +230,20 @@ function write_e2e_env(){
90230
secret_vars=(
91231
MYSQL_CONNECTION_NAME=MYSQL_CONNECTION_NAME
92232
MYSQL_USER=MYSQL_USER
93-
MYSQL_USER_IAM=MYSQL_USER_IAM_JAVA
94233
MYSQL_PASS=MYSQL_PASS
95234
MYSQL_DB=MYSQL_DB
96235
MYSQL_MCP_CONNECTION_NAME=MYSQL_MCP_CONNECTION_NAME
97236
MYSQL_MCP_PASS=MYSQL_MCP_PASS
98237
POSTGRES_CONNECTION_NAME=POSTGRES_CONNECTION_NAME
99-
POSTGRES_IAM_CONNECTION_NAME=POSTGRES_IAM_CONNECTION_NAME
100238
POSTGRES_USER=POSTGRES_USER
101-
POSTGRES_USER_IAM=POSTGRES_USER_IAM_JAVA
102239
POSTGRES_PASS=POSTGRES_PASS
103240
POSTGRES_DB=POSTGRES_DB
104241
POSTGRES_CAS_CONNECTION_NAME=POSTGRES_CAS_CONNECTION_NAME
105242
POSTGRES_CAS_PASS=POSTGRES_CAS_PASS
106243
POSTGRES_CUSTOMER_CAS_CONNECTION_NAME=POSTGRES_CUSTOMER_CAS_CONNECTION_NAME
107244
POSTGRES_CUSTOMER_CAS_PASS=POSTGRES_CUSTOMER_CAS_PASS
108-
POSTGRES_CUSTOMER_CAS_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_DOMAIN_NAME
109-
POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME
245+
POSTGRES_CUSTOMER_CAS_VALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME
246+
POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME
110247
POSTGRES_MCP_CONNECTION_NAME=POSTGRES_MCP_CONNECTION_NAME
111248
POSTGRES_MCP_PASS=POSTGRES_MCP_PASS
112249
SQLSERVER_CONNECTION_NAME=SQLSERVER_CONNECTION_NAME
@@ -117,13 +254,16 @@ function write_e2e_env(){
117254
QUOTA_PROJECT=QUOTA_PROJECT
118255
)
119256

120-
if [[ -z "$TEST_PROJECT" ]] ; then
257+
if [[ -z "${TEST_PROJECT:-}" ]] ; then
121258
echo "Set TEST_PROJECT environment variable to the project containing"
122259
echo "the e2e test suite secrets."
123260
exit 1
124261
fi
125262

126263
echo "Getting test secrets from $TEST_PROJECT into $outfile"
264+
local_user=$(gcloud auth list --format 'value(account)' | tr -d '\n')
265+
266+
echo "Getting test secrets from $TEST_PROJECT into $1"
127267
{
128268
for env_name in "${secret_vars[@]}" ; do
129269
env_var_name="${env_name%%=*}"
@@ -132,6 +272,9 @@ function write_e2e_env(){
132272
val=$(gcloud secrets versions access latest --project "$TEST_PROJECT" --secret="$secret_name")
133273
echo "export $env_var_name='$val'"
134274
done
275+
# Set IAM User env vars to the local gcloud user
276+
echo "export MYSQL_IAM_USER='${local_user%%@*}'"
277+
echo "export POSTGRES_IAM_USER='$local_user'"
135278
} > "$outfile"
136279

137280
}

jdbc/postgres/src/test/java/com/google/cloud/sql/postgres/JdbcPostgresCustomSanIntegrationTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@
4141
public class JdbcPostgresCustomSanIntegrationTests {
4242

4343
private static final String DOMAIN_NAME =
44-
System.getenv("POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME");
44+
System.getenv("POSTGRES_CUSTOMER_CAS_VALID_DOMAIN_NAME");
4545
private static final String INVALID_DOMAIN_NAME =
46-
System.getenv("POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME");
46+
System.getenv("POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME");
4747
private static final String DB_NAME = System.getenv("POSTGRES_DB");
4848
private static final String DB_USER = System.getenv("POSTGRES_USER");
4949
private static final String DB_PASSWORD = System.getenv("POSTGRES_CUSTOMER_CAS_PASS");
@@ -54,8 +54,8 @@ public class JdbcPostgresCustomSanIntegrationTests {
5454
"POSTGRES_USER",
5555
"POSTGRES_CUSTOMER_CAS_PASS",
5656
"POSTGRES_DB",
57-
"POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME",
58-
"POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME");
57+
"POSTGRES_CUSTOMER_CAS_VALID_DOMAIN_NAME",
58+
"POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME");
5959

6060
@Rule public Timeout globalTimeout = new Timeout(80, TimeUnit.SECONDS);
6161

0 commit comments

Comments
 (0)