diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e5b2b6c..ed7e066f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -860,16 +860,30 @@ jobs: if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') run: | run_gam() { - echo "::group::gam $*" - $gam "$@" - local exit_code=$? - echo "::endgroup::" - if [ $exit_code -eq 0 ]; then - echo "| \`gam $*\` | 🟢 Pass |" >> $GITHUB_STEP_SUMMARY - else - echo "| \`gam $*\` | 🔴 Fail |" >> $GITHUB_STEP_SUMMARY - exit $exit_code + local allowed_codes="0" + if [[ "$1" == "-a" ]]; then + allowed_codes="$2" + shift 2 + fi + echo "::group::Executing: gam $*" + local exit_code=0 + $gam "$@" || exit_code=$? + echo "::endgroup::" + allowed_codes="${allowed_codes//,/ }" + local passed=false + for code in $allowed_codes; do + if [ "$exit_code" -eq "$code" ]; then + passed=true + break fi + done + if [ "$passed" = true ]; then + echo "| \`gam $*\` | 🟢 Pass | $exit_code |" >> $GITHUB_STEP_SUMMARY + return 0 # Mask the allowed non-zero exit code so GHA continues + else + echo "| \`gam $*\` | 🔴 Fail | $exit_code |" >> $GITHUB_STEP_SUMMARY + exit $exit_code # Hard fail the step for unapproved errors + fi } export gam_user="gam-gha-${JID}@pdl.jaylee.us" @@ -900,18 +914,29 @@ jobs: # cleanup old runs run_gam config enable_dasa false save - $gam config csv_output_row_filter "name:regex:gha_test_${JID}_" print vaultholds | $gam csv - gam delete vaulthold "id:~~holdId~~" matter "id:~~matterId~~" || if [ $? != 55 ]; then exit $?; fi - $gam config csv_output_row_filter "name:regex:gha_test_${JID}_" print vaultmatters matterstate OPEN | $gam csv - gam update vaultmatter "id:~~matterId~~" action close - $gam config csv_output_row_filter "name:regex:gha_test_${JID}_" print vaultmatters matterstate CLOSED | $gam csv - gam update vaultmatter "id:~~matterId~~" action delete - $gam config csv_output_row_filter "Emails.1.address:regex:^gha_test-${JID}_" print contacts | $gam csv - gam delete contact ~ContactID + run_gam config csv_output_row_filter "name:regex:gha_test_${JID}_" redirect csv vh.csv print vaultholds + run_gam -a "0 55" csv vh.csv gam delete vaulthold "id:~~holdId~~" matter "id:~~matterId~~" + run_gam config csv_output_row_filter "name:regex:gha_test_${JID}_" redirect csv vm-open.csv print vaultmatters matterstate OPEN + run_gam csv vm-open.csv gam update vaultmatter "id:~~matterId~~" action close + run_gam config csv_output_row_filter "name:regex:gha_test_${JID}_" redirect csv vm-closed.csv print vaultmatters matterstate CLOSED + run_gam csv vm-closed.csv gam update vaultmatter "id:~~matterId~~" action delete + run_gam config csv_output_row_filter "Emails.1.address:regex:^gha_test-${JID}_" redirect csv contacts.csv print contacts + run-gam csv contacts.csv gam delete contact ~ContactID run_gam config enable_dasa true save - $gam config csv_output_row_filter "name:regex:gha_test_${JID}_" print features | $gam csv - gam delete feature ~name - $gam config csv_output_row_filter "name:regex:^gha_test_${JID}_" user $gam_user print shareddrives asadmin | $gam csv - gam user $gam_user delete shareddrive ~id nukefromorbit - $gam print users query "gha.jid=$JID" | $gam csv - gam delete user ~primaryEmail - $gam config csv_output_row_filter "name:regex:^gha_test_${JID}_" print ous fromparent "aaaGithub Actions" | $gam csv - gam delete ou ~orgUnitId - $gam config csv_output_row_filter "email:regex:^gha_test_${JID}_" print cigroups | $gam csv - gam delete cigroup ~email - $gam config csv_output_row_filter "resourceId:regex:^gha_test_${JID}_" print resources | $gam csv - gam delete resource ~resourceId - $gam config csv_output_row_filter "buildingId:regex:^gha_test_${JID}_" print buildings | $gam csv - gam delete building ~buildingId + run_gam config csv_output_row_filter "name:regex:gha_test_${JID}_" redirect csv features.csv print features + run_gam csv features.csv gam delete feature ~name + run_gam config csv_output_row_filter "name:regex:^gha_test_${JID}_" redirect csv sd.csv user $gam_user print shareddrives asadmin + run_gam csv sd.csv gam user $gam_user delete shareddrive ~id nukefromorbit + run_gam redirect csv users.csv print users query "gha.jid=$JID" + run_gam csv users.csv gam delete user ~primaryEmail + run_gam config csv_output_row_filter "name:regex:^gha_test_${JID}_" redirect csv ous.csv print ous fromparent "aaaGithub Actions" + run_gam csv ous.csv gam delete ou ~orgUnitId + run_gam config csv_output_row_filter "email:regex:^gha_test_${JID}_" redirect csv cigroups.csv print cigroups + run_gam csv cigroups.csv gam delete cigroup ~email + run_gam config csv_output_row_filter "resourceId:regex:^gha_test_${JID}_" redirect csv resources.csv print resources + run_gam csv resources gam delete resource ~resourceId + run_gam config csv_output_row_filter "buildingId:regex:^gha_test_${JID}_" redirect csv buildings.csv print buildings + run_gam csv buildings.csv gam delete building ~buildingId echo "Creating OrgUnit ${newou}" run_gam create ou "${newou}" @@ -976,11 +1001,12 @@ jobs: run_gam user $gam_user draftemail subject "GHA draft $newbase" message "Draft message test" run_gam csvfile sample.csv:email waitformailbox retries 20 run_gam user $newuser delegate to "${newbase}-bulkuser-1" || if [ $? != 50 ]; then exit $?; fi # expect a 50 return code (delegation failed) - $gam users "$gam_user $newbase-bulkuser-1 $newbase-bulkuser-2 $newbase-bulkuser-3" delete messages query in:anywhere maxtodelete 99999 doit || if [ $? != 60 ]; then exit $?; fi # expect a 60 return code (no messages) - $gam users "$newbase-bulkuser-4 $newbase-bulkuser-5 $newbase-bulkuser-6" trash messages query in:anywhere maxtotrash 99999 doit || if [ $? != 60 ]; then exit $?; fi # expect a 60 return code (no messages) - $gam users "$newbase-bulkuser-7 $newbase-bulkuser-8 $newbase-bulkuser-9" modify messages query in:anywhere maxtomodify 99999 addlabel IMPORTANT addlabel STARRED doit || if [ $? != 60 ]; then exit $?; fi # expect a 60 return code (no messages) + run_gam -a "0 60" users "$gam_user $newbase-bulkuser-1 $newbase-bulkuser-2 $newbase-bulkuser-3" delete messages query in:anywhere maxtodelete 99999 doit + run_gam -a "0 60" users "$newbase-bulkuser-4 $newbase-bulkuser-5 $newbase-bulkuser-6" trash messages query in:anywhere maxtotrash 99999 doit + run_gam -a "0 60" users "$newbase-bulkuser-7 $newbase-bulkuser-8 $newbase-bulkuser-9" modify messages query in:anywhere maxtomodify 99999 addlabel IMPORTANT addlabel STARRED doit run_gam user $newuser delete label --ALL_LABELS-- - $gam config csv_output_row_filter "name:regex:gha-test-${JID}" print features | $gam csv - gam delete feature ~name + run_gam config csv_output_row_filter "name:regex:gha-test-${JID}" redirect csv features.csv print features + run_gam csv features.csv gam delete feature ~name run_gam create feature name VC-$newbase run_gam create feature name Whiteboard-$newbase run_gam create building "My Building - $newbase" id $newbuilding floors 1,2,3,4,5,6,7,8,9,10,11,12,14,15 description "No 13th floor here..." @@ -988,12 +1014,14 @@ jobs: run_gam info resource $newresource run_gam user $newuser add drivefile drivefilename "TPS Reports" mimetype gfolder run_gam user $newuser show filelist - $gam calendar $gam_user printacl | $gam csv - gam calendar $gam_user delete ~id # clear ACLs + run_gam redirect csv cal-acl.csv calendar $gam_user printacl + run_gam csv cal-acl.csv gam calendar $gam_user delete ~id # clear ACLs run_gam calendar $gam_user add read domain run_gam calendar $gam_user add freebusy default run_gam calendar $gam_user add editor $newuser run_gam calendar $gam_user showacl - $gam calendar $gam_user printacl | $gam csv - gam calendar $gam_user delete ~id + run_gam redirect csv cal-acl.csv calendar $gam_user printacl + run_gam csv cal-acl.csv gam calendar $gam_user delete ~id run_gam calendar $gam_user addevent summary "GHA test event" start +1h end +2h attendee $newgroup hangoutsmeet guestscanmodify true sendupdates all run_gam calendar $gam_user printevents after -0d run_gam config enable_dasa false save @@ -1003,7 +1031,8 @@ jobs: run_gam print vaultholds matter $matterid run_gam print vaultcount matter $matterid corpus mail everyone todrive tdnobrowser run_gam create vaultexport matter $matterid name "GHA export $newbase" corpus mail ou "$newou" - $gam print exports matter $matterid | $gam csv - gam info export $matterid id:~~id~~ + run_gam redirect csv exports.csv print exports matter $matterid + run_gam csv exports.csv gam info export $matterid id:~~id~~ run_gam config enable_dasa true save run_gam csv sample.csv gam user ~email add calendar id:$newresource run_gam delete resource $newresource @@ -1016,24 +1045,27 @@ jobs: run_gam user $newuser delete license workspaceenterpriseplus echo finish run_gam config enable_dasa true save - $gam whatis $newuser || if [ $? != 20 ]; then exit $?; fi # expect a 20 return code (is a user) + run_gam -a "0 20" whatis $newuser run_gam user $gam_user show tokens run_gam config enable_dasa false save download_dir="${RUNNER_TEMP}/TEMP_DELETE_ME" mkdir -v "$download_dir" - $gam print exports matter $matterid | $gam csv - gam download export $matterid id:~~id~~ targetfolder "$download_dir" + run_gam redirect csv exports.csv print exports matter $matterid + run_gam csv exports.csv gam download export $matterid id:~~id~~ targetfolder "$download_dir" rm -rvf "$download_dir" run_gam delete hold "GHA hold $newbase" matter $matterid run_gam update matter $matterid action close run_gam update matter $matterid action delete # shakes off vault hold on user so we can delete - $gam print users query "email:${newuser}" orgunitpath | $gam csv - gam update user ~primaryEmail ou ~orgUnitPath + run_gam redirect csv users.csv print users query "email:${newuser}" orgunitpath + run-gam csv users.csv gam update user ~primaryEmail ou ~orgUnitPath run_gam user $newuser show holds || if [ $? != 55 ]; then exit $?; fi # expect a 55 return code export sn="$JID$JID$JID$JID-$(openssl rand -base64 32 | sed 's/[^a-zA-Z0-9]//g')" run_gam create device serialnumber $sn devicetype android run_gam delete contacts emailmatchpattern "^${newbase}@example.com$" run_gam config enable_dasa true save - $gam print users query "gha.jid=$JID" | $gam csv - gam delete user ~primaryEmail || if [ $? != 50 ]; then exit $?; fi # expect a 50 return code (vault hold on user) + run_gam redirect csv users.csv print users query "gha.jid=$JID" + run-gam -a "0 50" csv users.csv gam delete user ~primaryEmail run_gam print mobile run_gam print devices clientstates run_gam print browsers @@ -1045,10 +1077,12 @@ jobs: #run_gam report users fields accounts:is_less_secure_apps_access_allowed,gmail:last_imap_time,gmail:last_pop_time filters "accounts:last_login_time>2025-01-01T00:00:00.000Z" todrive tdnobrowser run_gam report users todrive tdnobrowser run_gam report admin start -3d todrive tdnobrowser - $gam print devices nopersonaldevices nodeviceusers filter "serial:$JID$JID$JID$JID-" | $gam csv - gam delete device id ~name + run_gam redirect csv devices.csv print devices nopersonaldevices nodeviceusers filter "serial:$JID$JID$JID$JID-" + run_gam csv devices.csv gam delete device id ~name run_gam config enable_dasa false save run_gam print userinvitations - $gam print userinvitations | $gam csv - gam send userinvitation ~name + run_gam redirect csv invitations.csv print userinvitations + run-gam csv invitations.csv gam send userinvitation ~name run_gam config enable_dasa false save run_gam create caalevel "zzz_${newbase}" basic condition ipsubnetworks 1.1.1.1/32,2.2.2.2/32 endcondition run_gam print caalevels @@ -1068,7 +1102,7 @@ jobs: echo "printer model count:" run_gam print printermodels | wc -l run_gam print printers - printerid=$(run_gam create printer displayname "${newbase}" uri ipp://localhost:631 driverless description "made by ${gam_user}" ou "${newou}" nodetails | awk '{print substr($2, 1, length($2)-1)}') + printerid=$($gam create printer displayname "${newbase}" uri ipp://localhost:631 driverless description "made by ${gam_user}" ou "${newou}" nodetails | awk '{print substr($2, 1, length($2)-1)}') run_gam info printer "$printerid" run_gam delete printer "$printerid" run_gam delete ou "${newou}"