Skip to content

Commit a6857a8

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

File tree

3 files changed

+158
-16
lines changed

3 files changed

+158
-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: 150 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,14 @@ 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() {
6060
if [[ ! -f .envrc ]] ; then
6161
write_e2e_env .envrc
6262
fi
6363
source .envrc
64-
.github/scripts/run_tests_graalvm_native.sh
64+
export JAVA_HOME=$PWD/.tools/graalvm-ce-jdk-24/Contents/Home
65+
JOB_TYPE=integration .github/scripts/run_tests_graalvm_native.sh
6566
}
6667

6768
## fix - Fixes java code format.
@@ -74,13 +75,151 @@ function lint() {
7475
mvn -P lint install -DskipTests=true
7576
}
7677

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

78116
## deps - updates dependencies to the latest version
79117
function deps() {
80118
mvn versions:use-latest-versions
81119
find . -name 'pom.xml.versionsBackup' -print0 | xargs -0 rm -f
82120
}
83121

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

85224
# write_e2e_env - Loads secrets from the gcloud project and writes
86225
# them to target/e2e.env to run e2e tests.
@@ -90,23 +229,20 @@ function write_e2e_env(){
90229
secret_vars=(
91230
MYSQL_CONNECTION_NAME=MYSQL_CONNECTION_NAME
92231
MYSQL_USER=MYSQL_USER
93-
MYSQL_USER_IAM=MYSQL_USER_IAM_JAVA
94232
MYSQL_PASS=MYSQL_PASS
95233
MYSQL_DB=MYSQL_DB
96234
MYSQL_MCP_CONNECTION_NAME=MYSQL_MCP_CONNECTION_NAME
97235
MYSQL_MCP_PASS=MYSQL_MCP_PASS
98236
POSTGRES_CONNECTION_NAME=POSTGRES_CONNECTION_NAME
99-
POSTGRES_IAM_CONNECTION_NAME=POSTGRES_IAM_CONNECTION_NAME
100237
POSTGRES_USER=POSTGRES_USER
101-
POSTGRES_USER_IAM=POSTGRES_USER_IAM_JAVA
102238
POSTGRES_PASS=POSTGRES_PASS
103239
POSTGRES_DB=POSTGRES_DB
104240
POSTGRES_CAS_CONNECTION_NAME=POSTGRES_CAS_CONNECTION_NAME
105241
POSTGRES_CAS_PASS=POSTGRES_CAS_PASS
106242
POSTGRES_CUSTOMER_CAS_CONNECTION_NAME=POSTGRES_CUSTOMER_CAS_CONNECTION_NAME
107243
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
244+
POSTGRES_CUSTOMER_CAS_VALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME
245+
POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME
110246
POSTGRES_MCP_CONNECTION_NAME=POSTGRES_MCP_CONNECTION_NAME
111247
POSTGRES_MCP_PASS=POSTGRES_MCP_PASS
112248
SQLSERVER_CONNECTION_NAME=SQLSERVER_CONNECTION_NAME
@@ -117,13 +253,16 @@ function write_e2e_env(){
117253
QUOTA_PROJECT=QUOTA_PROJECT
118254
)
119255

120-
if [[ -z "$TEST_PROJECT" ]] ; then
256+
if [[ -z "${TEST_PROJECT:-}" ]] ; then
121257
echo "Set TEST_PROJECT environment variable to the project containing"
122258
echo "the e2e test suite secrets."
123259
exit 1
124260
fi
125261

126262
echo "Getting test secrets from $TEST_PROJECT into $outfile"
263+
local_user=$(gcloud auth list --format 'value(account)' | tr -d '\n')
264+
265+
echo "Getting test secrets from $TEST_PROJECT into $1"
127266
{
128267
for env_name in "${secret_vars[@]}" ; do
129268
env_var_name="${env_name%%=*}"
@@ -132,6 +271,9 @@ function write_e2e_env(){
132271
val=$(gcloud secrets versions access latest --project "$TEST_PROJECT" --secret="$secret_name")
133272
echo "export $env_var_name='$val'"
134273
done
274+
# Set IAM User env vars to the local gcloud user
275+
echo "export MYSQL_IAM_USER='${local_user%%@*}'"
276+
echo "export POSTGRES_IAM_USER='$local_user'"
135277
} > "$outfile"
136278

137279
}

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)