gam7 7.21.1__tar.gz → 7.21.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of gam7 might be problematic. Click here for more details.

Files changed (304) hide show
  1. {gam7-7.21.1 → gam7-7.21.3}/.github/workflows/build.yml +17 -20
  2. {gam7-7.21.1 → gam7-7.21.3}/PKG-INFO +1 -1
  3. {gam7-7.21.1 → gam7-7.21.3}/src/GamCommands.txt +4 -4
  4. {gam7-7.21.1 → gam7-7.21.3}/src/GamUpdate.txt +13 -0
  5. {gam7-7.21.1 → gam7-7.21.3}/src/gam/__init__.py +22 -11
  6. gam7-7.21.3/wiki/GAM-Release-Process.md +19 -0
  7. {gam7-7.21.1 → gam7-7.21.3}/wiki/GamUpdates.md +9 -1
  8. {gam7-7.21.1 → gam7-7.21.3}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
  9. {gam7-7.21.1 → gam7-7.21.3}/wiki/Version-and-Help.md +6 -6
  10. {gam7-7.21.1 → gam7-7.21.3}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  11. {gam7-7.21.1 → gam7-7.21.3}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  12. {gam7-7.21.1 → gam7-7.21.3}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  13. {gam7-7.21.1 → gam7-7.21.3}/.github/ISSUE_TEMPLATE.txt +0 -0
  14. {gam7-7.21.1 → gam7-7.21.3}/.github/actions/decrypt.sh +0 -0
  15. {gam7-7.21.1 → gam7-7.21.3}/.github/actions/entitlements.plist +0 -0
  16. {gam7-7.21.1 → gam7-7.21.3}/.github/actions/package_exclusions.txt +0 -0
  17. {gam7-7.21.1 → gam7-7.21.3}/.github/stale.yml +0 -0
  18. {gam7-7.21.1 → gam7-7.21.3}/.github/workflows/codeql-analysis.yml +0 -0
  19. {gam7-7.21.1 → gam7-7.21.3}/.github/workflows/get-cacerts.yml +0 -0
  20. {gam7-7.21.1 → gam7-7.21.3}/.github/workflows/pushwiki.yml +0 -0
  21. {gam7-7.21.1 → gam7-7.21.3}/.github/workflows/pypi.yml +0 -0
  22. {gam7-7.21.1 → gam7-7.21.3}/LICENSE +0 -0
  23. {gam7-7.21.1 → gam7-7.21.3}/README.md +0 -0
  24. {gam7-7.21.1 → gam7-7.21.3}/pyproject.toml +0 -0
  25. {gam7-7.21.1 → gam7-7.21.3}/src/.gitignore +0 -0
  26. {gam7-7.21.1 → gam7-7.21.3}/src/LICENSE +0 -0
  27. {gam7-7.21.1 → gam7-7.21.3}/src/README.md +0 -0
  28. {gam7-7.21.1 → gam7-7.21.3}/src/callgam.py +0 -0
  29. {gam7-7.21.1 → gam7-7.21.3}/src/gam/__main__.py +0 -0
  30. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/__init__.py +0 -0
  31. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/auth.py +0 -0
  32. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/client.py +0 -0
  33. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/core.py +0 -0
  34. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/data.py +0 -0
  35. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/http.py +0 -0
  36. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/http_core.py +0 -0
  37. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/http_interface.py +0 -0
  38. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/mock_http.py +0 -0
  39. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/mock_http_core.py +0 -0
  40. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/mock_service.py +0 -0
  41. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/service.py +0 -0
  42. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/token_store.py +0 -0
  43. {gam7-7.21.1 → gam7-7.21.3}/src/gam/atom/url.py +0 -0
  44. {gam7-7.21.1 → gam7-7.21.3}/src/gam/cacerts.pem +0 -0
  45. {gam7-7.21.1 → gam7-7.21.3}/src/gam/cbcm-v1.1beta1.json +0 -0
  46. {gam7-7.21.1 → gam7-7.21.3}/src/gam/contactdelegation-v1.json +0 -0
  47. {gam7-7.21.1 → gam7-7.21.3}/src/gam/datastudio-v1.json +0 -0
  48. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/__init__.py +0 -0
  49. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glaction.py +0 -0
  50. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glapi.py +0 -0
  51. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glcfg.py +0 -0
  52. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glclargs.py +0 -0
  53. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glentity.py +0 -0
  54. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glgapi.py +0 -0
  55. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glgdata.py +0 -0
  56. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glglobals.py +0 -0
  57. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glindent.py +0 -0
  58. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glmsgs.py +0 -0
  59. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glskus.py +0 -0
  60. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/gluprop.py +0 -0
  61. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/glverlibs.py +0 -0
  62. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gamlib/yubikey.py +0 -0
  63. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/__init__.py +0 -0
  64. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/alt/__init__.py +0 -0
  65. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/alt/app_engine.py +0 -0
  66. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/alt/appengine.py +0 -0
  67. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/apps/__init__.py +0 -0
  68. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/apps/audit/__init__.py +0 -0
  69. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/apps/audit/service.py +0 -0
  70. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  71. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/apps/contacts/service.py +0 -0
  72. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/apps/service.py +0 -0
  73. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/service.py +0 -0
  74. {gam7-7.21.1 → gam7-7.21.3}/src/gam/gdata/urlfetch.py +0 -0
  75. {gam7-7.21.1 → gam7-7.21.3}/src/gam/meet-v2beta.json +0 -0
  76. {gam7-7.21.1 → gam7-7.21.3}/src/gam/serviceaccountlookup-v1.json +0 -0
  77. {gam7-7.21.1 → gam7-7.21.3}/src/gam-install.sh +0 -0
  78. {gam7-7.21.1 → gam7-7.21.3}/src/gam-setup.bat +0 -0
  79. {gam7-7.21.1 → gam7-7.21.3}/src/gam.exe.manifest +0 -0
  80. {gam7-7.21.1 → gam7-7.21.3}/src/gam.py +0 -0
  81. {gam7-7.21.1 → gam7-7.21.3}/src/gam.spec +0 -0
  82. {gam7-7.21.1 → gam7-7.21.3}/src/gam.wxs +0 -0
  83. {gam7-7.21.1 → gam7-7.21.3}/src/license.rtf +0 -0
  84. {gam7-7.21.1 → gam7-7.21.3}/src/tools/a_atleast_b.py +0 -0
  85. {gam7-7.21.1 → gam7-7.21.3}/src/tools/gen-wix-xml-filelist.py +0 -0
  86. {gam7-7.21.1 → gam7-7.21.3}/src/tools/hooks/hook-googleapiclient.model.py +0 -0
  87. {gam7-7.21.1 → gam7-7.21.3}/src/tools/hooks/hook-httplib2.py +0 -0
  88. {gam7-7.21.1 → gam7-7.21.3}/src/tools/mkGamRef.py +0 -0
  89. {gam7-7.21.1 → gam7-7.21.3}/src/tools/openssl.props +0 -0
  90. {gam7-7.21.1 → gam7-7.21.3}/src/tools/ssd.mjs +0 -0
  91. {gam7-7.21.1 → gam7-7.21.3}/src/version_info.txt.in +0 -0
  92. {gam7-7.21.1 → gam7-7.21.3}/wiki/00scratch.md +0 -0
  93. {gam7-7.21.1 → gam7-7.21.3}/wiki/Addresses.md +0 -0
  94. {gam7-7.21.1 → gam7-7.21.3}/wiki/Administrators.md +0 -0
  95. {gam7-7.21.1 → gam7-7.21.3}/wiki/Alert-Center.md +0 -0
  96. {gam7-7.21.1 → gam7-7.21.3}/wiki/Aliases.md +0 -0
  97. {gam7-7.21.1 → gam7-7.21.3}/wiki/Authorization.md +0 -0
  98. {gam7-7.21.1 → gam7-7.21.3}/wiki/BNF-Syntax.md +0 -0
  99. {gam7-7.21.1 → gam7-7.21.3}/wiki/Basic-Items.md +0 -0
  100. {gam7-7.21.1 → gam7-7.21.3}/wiki/Bulk-Processing.md +0 -0
  101. {gam7-7.21.1 → gam7-7.21.3}/wiki/Business-Account-Management.md +0 -0
  102. {gam7-7.21.1 → gam7-7.21.3}/wiki/CSV-Input-Filtering.md +0 -0
  103. {gam7-7.21.1 → gam7-7.21.3}/wiki/CSV-Output-Filtering.md +0 -0
  104. {gam7-7.21.1 → gam7-7.21.3}/wiki/CSV-Special-Characters.md +0 -0
  105. {gam7-7.21.1 → gam7-7.21.3}/wiki/Calendars-Access.md +0 -0
  106. {gam7-7.21.1 → gam7-7.21.3}/wiki/Calendars-Events.md +0 -0
  107. {gam7-7.21.1 → gam7-7.21.3}/wiki/Calendars.md +0 -0
  108. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chat-Bot-Setup-Use.md +0 -0
  109. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chrome-AUE-Counts.md +0 -0
  110. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  111. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chrome-Installed-Apps.md +0 -0
  112. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  113. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chrome-Policies.md +0 -0
  114. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chrome-Printers.md +0 -0
  115. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chrome-Profile-Management.md +0 -0
  116. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chrome-Version-Counts.md +0 -0
  117. {gam7-7.21.1 → gam7-7.21.3}/wiki/Chrome-Version-History.md +0 -0
  118. {gam7-7.21.1 → gam7-7.21.3}/wiki/ChromeOS-Devices.md +0 -0
  119. {gam7-7.21.1 → gam7-7.21.3}/wiki/Classroom-Courses.md +0 -0
  120. {gam7-7.21.1 → gam7-7.21.3}/wiki/Classroom-Guardians.md +0 -0
  121. {gam7-7.21.1 → gam7-7.21.3}/wiki/Classroom-Invitations.md +0 -0
  122. {gam7-7.21.1 → gam7-7.21.3}/wiki/Classroom-Membership.md +0 -0
  123. {gam7-7.21.1 → gam7-7.21.3}/wiki/Classroom-StudentGroups.md +0 -0
  124. {gam7-7.21.1 → gam7-7.21.3}/wiki/Cloud-Channel.md +0 -0
  125. {gam7-7.21.1 → gam7-7.21.3}/wiki/Cloud-Identity-Devices.md +0 -0
  126. {gam7-7.21.1 → gam7-7.21.3}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  127. {gam7-7.21.1 → gam7-7.21.3}/wiki/Cloud-Identity-Groups.md +0 -0
  128. {gam7-7.21.1 → gam7-7.21.3}/wiki/Cloud-Identity-Policies.md +0 -0
  129. {gam7-7.21.1 → gam7-7.21.3}/wiki/Cloud-Storage.md +0 -0
  130. {gam7-7.21.1 → gam7-7.21.3}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  131. {gam7-7.21.1 → gam7-7.21.3}/wiki/Collections-of-Items.md +0 -0
  132. {gam7-7.21.1 → gam7-7.21.3}/wiki/Collections-of-Users.md +0 -0
  133. {gam7-7.21.1 → gam7-7.21.3}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
  134. {gam7-7.21.1 → gam7-7.21.3}/wiki/Command-Line-Parsing.md +0 -0
  135. {gam7-7.21.1 → gam7-7.21.3}/wiki/Command-Logging-Progress.md +0 -0
  136. {gam7-7.21.1 → gam7-7.21.3}/wiki/Context-Aware-Access-Levels.md +0 -0
  137. {gam7-7.21.1 → gam7-7.21.3}/wiki/Customer.md +0 -0
  138. {gam7-7.21.1 → gam7-7.21.3}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  139. {gam7-7.21.1 → gam7-7.21.3}/wiki/Domain-SharedContacts.md +0 -0
  140. {gam7-7.21.1 → gam7-7.21.3}/wiki/Domains-Verification.md +0 -0
  141. {gam7-7.21.1 → gam7-7.21.3}/wiki/Domains.md +0 -0
  142. {gam7-7.21.1 → gam7-7.21.3}/wiki/Downloads-Installs.md +0 -0
  143. {gam7-7.21.1 → gam7-7.21.3}/wiki/Drive-File-Selection.md +0 -0
  144. {gam7-7.21.1 → gam7-7.21.3}/wiki/Drive-Items.md +0 -0
  145. {gam7-7.21.1 → gam7-7.21.3}/wiki/Drive-REST-API-v3.md +0 -0
  146. {gam7-7.21.1 → gam7-7.21.3}/wiki/Email-Audit-Monitor.md +0 -0
  147. {gam7-7.21.1 → gam7-7.21.3}/wiki/Find-File-Owner.md +0 -0
  148. {gam7-7.21.1 → gam7-7.21.3}/wiki/GAM-Public-Chat-Room.md +0 -0
  149. {gam7-7.21.1 → gam7-7.21.3}/wiki/GAM-Return-Codes.md +0 -0
  150. {gam7-7.21.1 → gam7-7.21.3}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  151. {gam7-7.21.1 → gam7-7.21.3}/wiki/GAM7-on-Android-Devices.md +0 -0
  152. {gam7-7.21.1 → gam7-7.21.3}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  153. {gam7-7.21.1 → gam7-7.21.3}/wiki/Global-Address-List.md +0 -0
  154. {gam7-7.21.1 → gam7-7.21.3}/wiki/Google-Data-Transfers.md +0 -0
  155. {gam7-7.21.1 → gam7-7.21.3}/wiki/Google-Network-Addresses.md +0 -0
  156. {gam7-7.21.1 → gam7-7.21.3}/wiki/Groups-Membership.md +0 -0
  157. {gam7-7.21.1 → gam7-7.21.3}/wiki/Groups.md +0 -0
  158. {gam7-7.21.1 → gam7-7.21.3}/wiki/HTTPS-Proxy.md +0 -0
  159. {gam7-7.21.1 → gam7-7.21.3}/wiki/Home.md +0 -0
  160. {gam7-7.21.1 → gam7-7.21.3}/wiki/How-to-Install-GAM7.md +0 -0
  161. {gam7-7.21.1 → gam7-7.21.3}/wiki/How-to-Uninstall-GAM7.md +0 -0
  162. {gam7-7.21.1 → gam7-7.21.3}/wiki/How-to-Update-GAM7.md +0 -0
  163. {gam7-7.21.1 → gam7-7.21.3}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  164. {gam7-7.21.1 → gam7-7.21.3}/wiki/Inbound-SSO.md +0 -0
  165. {gam7-7.21.1 → gam7-7.21.3}/wiki/Install-GAM-as-Python-Library.md +0 -0
  166. {gam7-7.21.1 → gam7-7.21.3}/wiki/Licenses.md +0 -0
  167. {gam7-7.21.1 → gam7-7.21.3}/wiki/List-Items.md +0 -0
  168. {gam7-7.21.1 → gam7-7.21.3}/wiki/List.md +0 -0
  169. {gam7-7.21.1 → gam7-7.21.3}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  170. {gam7-7.21.1 → gam7-7.21.3}/wiki/Mobile-Devices.md +0 -0
  171. {gam7-7.21.1 → gam7-7.21.3}/wiki/Organizational-Units.md +0 -0
  172. {gam7-7.21.1 → gam7-7.21.3}/wiki/Other-Resources.md +0 -0
  173. {gam7-7.21.1 → gam7-7.21.3}/wiki/Permission-Matches.md +0 -0
  174. {gam7-7.21.1 → gam7-7.21.3}/wiki/Python-Regular-Expressions.md +0 -0
  175. {gam7-7.21.1 → gam7-7.21.3}/wiki/README.md +0 -0
  176. {gam7-7.21.1 → gam7-7.21.3}/wiki/Rclone.md +0 -0
  177. {gam7-7.21.1 → gam7-7.21.3}/wiki/Reports.md +0 -0
  178. {gam7-7.21.1 → gam7-7.21.3}/wiki/Reseller.md +0 -0
  179. {gam7-7.21.1 → gam7-7.21.3}/wiki/Resources.md +0 -0
  180. {gam7-7.21.1 → gam7-7.21.3}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  181. {gam7-7.21.1 → gam7-7.21.3}/wiki/SSL-Root-CA-Certificates.md +0 -0
  182. {gam7-7.21.1 → gam7-7.21.3}/wiki/Schemas.md +0 -0
  183. {gam7-7.21.1 → gam7-7.21.3}/wiki/Scripts.md +0 -0
  184. {gam7-7.21.1 → gam7-7.21.3}/wiki/Send-Email.md +0 -0
  185. {gam7-7.21.1 → gam7-7.21.3}/wiki/Shared-Drives.md +0 -0
  186. {gam7-7.21.1 → gam7-7.21.3}/wiki/Sites.md +0 -0
  187. {gam7-7.21.1 → gam7-7.21.3}/wiki/Tag-Replace.md +0 -0
  188. {gam7-7.21.1 → gam7-7.21.3}/wiki/Todrive.md +0 -0
  189. {gam7-7.21.1 → gam7-7.21.3}/wiki/Unmanaged-Accounts.md +0 -0
  190. {gam7-7.21.1 → gam7-7.21.3}/wiki/Upgrade-Benefits.md +0 -0
  191. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Analytics-Admin.md +0 -0
  192. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Application-Specific-Passwords.md +0 -0
  193. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Backup-Verification-Codes.md +0 -0
  194. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Calendars-Access.md +0 -0
  195. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Calendars-Events.md +0 -0
  196. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Calendars.md +0 -0
  197. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Chat.md +0 -0
  198. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Classification-Labels.md +0 -0
  199. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Classroom-Profile.md +0 -0
  200. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Contacts-Delegates.md +0 -0
  201. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Contacts.md +0 -0
  202. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Deprovision.md +0 -0
  203. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Activity-Settings.md +0 -0
  204. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Cleanup.md +0 -0
  205. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Comments.md +0 -0
  206. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Copy-Move.md +0 -0
  207. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Files-Display.md +0 -0
  208. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Files-Manage.md +0 -0
  209. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Orphans.md +0 -0
  210. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Ownership.md +0 -0
  211. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Permissions.md +0 -0
  212. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Query.md +0 -0
  213. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Revisions.md +0 -0
  214. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Shortcuts.md +0 -0
  215. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Drive-Transfer.md +0 -0
  216. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Forms.md +0 -0
  217. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-CSE.md +0 -0
  218. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-Delegates.md +0 -0
  219. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-Filters.md +0 -0
  220. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-Forwarding.md +0 -0
  221. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-Labels.md +0 -0
  222. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  223. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-Profile.md +0 -0
  224. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-S-MIME.md +0 -0
  225. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  226. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Gmail-Settings.md +0 -0
  227. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Group-Membership.md +0 -0
  228. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Keep-Notes.md +0 -0
  229. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Looker-Studio.md +0 -0
  230. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Meet.md +0 -0
  231. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-People-Contacts-Profiles.md +0 -0
  232. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Photo.md +0 -0
  233. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Profile-Photo.md +0 -0
  234. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Profile-Sharing.md +0 -0
  235. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Shared-Drives.md +0 -0
  236. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  237. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Spreadsheets.md +0 -0
  238. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Tag-Manager.md +0 -0
  239. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Tasks.md +0 -0
  240. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Tokens.md +0 -0
  241. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-Web-Resources-and-Sites.md +0 -0
  242. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users-YouTube.md +0 -0
  243. {gam7-7.21.1 → gam7-7.21.3}/wiki/Users.md +0 -0
  244. {gam7-7.21.1 → gam7-7.21.3}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  245. {gam7-7.21.1 → gam7-7.21.3}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  246. {gam7-7.21.1 → gam7-7.21.3}/wiki/Vault-Takeout.md +0 -0
  247. {gam7-7.21.1 → gam7-7.21.3}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  248. {gam7-7.21.1 → gam7-7.21.3}/wiki/_Sidebar.md +0 -0
  249. {gam7-7.21.1 → gam7-7.21.3}/wiki/gam.cfg.md +0 -0
  250. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-AdminSettingsExamples.md +0 -0
  251. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Android-Installation.md +0 -0
  252. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-BulkOperations.md +0 -0
  253. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-CalendarExamples.md +0 -0
  254. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Chat-Bot.md +0 -0
  255. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Chrome-Browser-Management.md +0 -0
  256. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Chrome-OS-Installation.md +0 -0
  257. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Chrome-Policy-Settings.md +0 -0
  258. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Cloud-Identity-Groups.md +0 -0
  259. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
  260. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Command-Reference-Calendars.md +0 -0
  261. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Command-Reference-Definitions.md +0 -0
  262. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Command-Reference-Drive.md +0 -0
  263. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Command-Reference-Email.md +0 -0
  264. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
  265. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Command-Reference-Groups.md +0 -0
  266. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Command-Reference-Users.md +0 -0
  267. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Context-Aware-Access-Levels.md +0 -0
  268. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  269. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-CreatingClientSecretsFile.md +0 -0
  270. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Custom-Schemas.md +0 -0
  271. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Data-Transfers.md +0 -0
  272. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-DomainVerification.md +0 -0
  273. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-ExamplesAccountAuditing.md +0 -0
  274. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-ExamplesCSV.md +0 -0
  275. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-ExamplesEmailSettings.md +0 -0
  276. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-ExamplesOrganizations.md +0 -0
  277. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-GAM-Discussion-Group.md +0 -0
  278. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  279. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-GAM-options-files.md +0 -0
  280. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
  281. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-GAM3CSVListings.md +0 -0
  282. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-GAM3DirectoryCommands.md +0 -0
  283. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-GAM3GroupSettings.md +0 -0
  284. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-GAM7-FAQ.md +0 -0
  285. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
  286. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-GoogleDriveManagement.md +0 -0
  287. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
  288. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Home.md +0 -0
  289. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  290. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Inbound-SSO-Settings.md +0 -0
  291. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-LicenseExamples.md +0 -0
  292. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Managing-Admins.md +0 -0
  293. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
  294. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Managing-Devices.md +0 -0
  295. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Managing-Google-Classroom.md +0 -0
  296. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-OAuthKeyManagement.md +0 -0
  297. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Printers.md +0 -0
  298. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-ResellerCommands.md +0 -0
  299. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
  300. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-SecurityExamples.md +0 -0
  301. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-UnmanagedUsersExamples.md +0 -0
  302. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Use-a-Yubikey.md +0 -0
  303. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  304. {gam7-7.21.1 → gam7-7.21.3}/wiki/l-_Footer.md +0 -0
@@ -77,34 +77,38 @@ jobs:
77
77
  jid: 9
78
78
  goal: build
79
79
  name: Build Arm MacOS 15
80
- - os: windows-2025
80
+ - os: macos-26
81
81
  jid: 10
82
82
  goal: build
83
+ name: Build Arm MacOS 26
84
+ - os: windows-2025
85
+ jid: 11
86
+ goal: build
83
87
  name: Build Intel Windows
84
88
  - os: windows-11-arm
85
- jid: 11
89
+ jid: 12
86
90
  goal: build
87
91
  name: Build Arm Windows
88
92
  - os: ubuntu-24.04
89
93
  goal: test
90
94
  python: "3.10"
91
- jid: 12
95
+ jid: 13
92
96
  name: Test Python 3.10
93
97
  - os: ubuntu-24.04
94
98
  goal: test
95
99
  python: "3.11"
96
- jid: 13
100
+ jid: 14
97
101
  name: Test Python 3.11
98
102
  - os: ubuntu-24.04
99
103
  goal: test
100
104
  python: "3.12"
101
- jid: 14
102
- name: Test Python 3.12
103
- - os: ubuntu-24.04
104
- goal: test
105
- python: "3.14-dev"
106
105
  jid: 15
107
- name: Test Python 3.14-dev
106
+ name: Test Python 3.12
107
+ #- os: ubuntu-24.04
108
+ # goal: test
109
+ # python: "3.14-dev"
110
+ # jid: 16
111
+ # name: Test Python 3.14-dev
108
112
 
109
113
  steps:
110
114
 
@@ -127,7 +131,7 @@ jobs:
127
131
  with:
128
132
  path: |
129
133
  cache.tar.xz
130
- key: gam-${{ matrix.jid }}-20250911
134
+ key: gam-${{ matrix.jid }}-20250916
131
135
 
132
136
  - name: Untar Cache archive
133
137
  if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
@@ -454,21 +458,14 @@ jobs:
454
458
  "$PYTHON" -m pip install --upgrade setuptools-scm
455
459
  "$PYTHON" -m pip list
456
460
 
457
- - name: Custom wheels for Win arm64
458
- if: runner.os == 'Windows' && runner.arch == 'ARM64'
459
- run: |
460
- latest_crypt_whl=$(curl https://api.github.com/repos/jay0lee/cryptography/releases/latest -s | jq -r .assets.[0].browser_download_url)
461
- echo "Downloading ${latest_crypt_whl}..."
462
- curl -O -L "$latest_crypt_whl"
463
- "$PYTHON" -m pip install cryptography*.whl
464
-
465
461
  - name: Install pip requirements
466
462
  run: |
467
463
  echo "before anything..."
468
464
  "$PYTHON" -m pip list
469
465
  "$PYTHON" -m pip install --upgrade ..[yubikey]
466
+ # forcefully update all installed packages
467
+ "$PYTHON" -m pip --disable-pip-version-check list --outdated --format=json | "$PYTHON" -c "import json, sys; print('\n'.join([x['name'] for x in json.load(sys.stdin)]))" | xargs -n1 "$PYTHON" -m pip install -U
470
468
  "$PYTHON" -m pip list
471
- #"$PYTHON" -m pip install --force-reinstall --no-deps --upgrade cryptography
472
469
  echo "after everything..."
473
470
  "$PYTHON" -m pip list
474
471
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.21.1
3
+ Version: 7.21.3
4
4
  Summary: CLI tool to manage Google Workspace
5
5
  Project-URL: Homepage, https://github.com/GAM-team/GAM
6
6
  Project-URL: Issues, https://github.com/GAM-team/GAM/issues
@@ -5710,7 +5710,7 @@ gam create|add user <EmailAddress> [ignorenullpassword] <UserAttribute>*
5710
5710
  (groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
5711
5711
  [alias|aliases <EmailAddressList>]
5712
5712
  [license <SKUIDList> [product|productid <ProductID>]]
5713
- [notify <EmailAddressList>
5713
+ [[notify <EmailAddressList>] [notifyrecoveryemail]
5714
5714
  [subject <String>]
5715
5715
  [notifypassword <String>]
5716
5716
  [from <EmailAaddress>]
@@ -5736,7 +5736,7 @@ gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
5736
5736
  [createifnotfound] [notfoundpassword (random [<Integer>])|blocklogin|<Password>]
5737
5737
  (groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
5738
5738
  [alias|aliases <EmailAddressList>]
5739
- [notify <EmailAddressList>
5739
+ [[notify <EmailAddressList>] [notifyrecoveryemail]
5740
5740
  [subject <String>]
5741
5741
  [notifypassword <String>]
5742
5742
  [from <EmailAaddress>]
@@ -5774,7 +5774,7 @@ gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
5774
5774
  [createifnotfound] [notfoundpassword (random [<Integer>])|blocklogin|<Password>]
5775
5775
  (groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
5776
5776
  [alias|aliases <EmailAddressList>]
5777
- [notify <EmailAddressList>
5777
+ [[notify <EmailAddressList>] [notifyrecoveryemail]
5778
5778
  [subject <String>]
5779
5779
  [notifypassword <String>]
5780
5780
  [from <EmailAddress>]
@@ -5811,7 +5811,7 @@ gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
5811
5811
  [createifnotfound] [notfoundpassword (random [<Integer>])|blocklogin|<Password>]
5812
5812
  (groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
5813
5813
  [alias|aliases <EmailAddressList>]
5814
- [notify <EmailAddressList>
5814
+ [[notify <EmailAddressList>] [notifyrecoveryemail]
5815
5815
  [subject <String>]
5816
5816
  [notifypassword <String>]
5817
5817
  [from <EmailAaddress>]
@@ -1,3 +1,16 @@
1
+ 7.21.03
2
+
3
+ Added option `notifyrecoveryemail` to `gam create user` and `gam <UserTypeEntity> update user password <String>`
4
+ that sends the passsword notification email to the user's recovery email address (if defined).
5
+
6
+ 7.21.02
7
+
8
+ GAM now builds on macOS 26 Tahoe and properly identifies the OS.
9
+
10
+ A custom build of the cryptography library is no longer needed for Windows arm64 builds as the project now releases their own build for the OS.
11
+
12
+ Upgrade to OpenSSL 3.5.3 latest
13
+
1
14
  7.21.01
2
15
 
3
16
  Replaced datetime, dateutil, calendar and iso8601 Python libraries with arrow library.
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
25
25
  """
26
26
 
27
27
  __author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
28
- __version__ = '7.21.01'
28
+ __version__ = '7.21.03'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -9361,6 +9361,7 @@ MACOS_CODENAMES = {
9361
9361
  13: 'Ventura',
9362
9362
  14: 'Sonoma',
9363
9363
  15: 'Sequoia',
9364
+ 26: 'Tahoe',
9364
9365
  }
9365
9366
 
9366
9367
  def getOSPlatform():
@@ -9370,7 +9371,7 @@ def getOSPlatform():
9370
9371
  elif myos == 'Windows':
9371
9372
  pltfrm = ' '.join(platform.win32_ver())
9372
9373
  elif myos == 'Darwin':
9373
- myos = 'MacOS'
9374
+ myos = 'macOS'
9374
9375
  mac_ver = platform.mac_ver()[0]
9375
9376
  major_ver = int(mac_ver.split('.')[0]) # macver 10.14.6 == major_ver 10
9376
9377
  minor_ver = int(mac_ver.split('.')[1]) # macver 10.14.6 == minor_ver 14
@@ -43946,6 +43947,7 @@ def getUserAttributes(cd, updateCmd, noUid=False):
43946
43947
  invalidArgumentExit(Cmd.OB_SCHEMA_NAME_FIELD_NAME)
43947
43948
 
43948
43949
  parameters = {
43950
+ 'notifyRecoveryEmail': False,
43949
43951
  'verifyNotInvitable': False,
43950
43952
  'createIfNotFound': False,
43951
43953
  'noActionIfAlias': False,
@@ -43962,7 +43964,7 @@ def getUserAttributes(cd, updateCmd, noUid=False):
43962
43964
  body = {'name': {'givenName': UNKNOWN, 'familyName': UNKNOWN}}
43963
43965
  body['primaryEmail'] = getEmailAddress(noUid=noUid)
43964
43966
  notFoundBody = {}
43965
- notify = {'subject': '', 'message': '', 'html': False, 'charset': UTF8, 'password': ''}
43967
+ notify = {'recipients': [], 'subject': '', 'message': '', 'html': False, 'charset': UTF8, 'password': ''}
43966
43968
  primary = {}
43967
43969
  updatePrimaryEmail = {}
43968
43970
  groupOrgUnitMap = None
@@ -43974,7 +43976,9 @@ def getUserAttributes(cd, updateCmd, noUid=False):
43974
43976
  while Cmd.ArgumentsRemaining():
43975
43977
  myarg = getArgument()
43976
43978
  if myarg == 'notify':
43977
- notify['recipients'] = getNormalizedEmailAddressEntity(shlexSplit=True, noLower=True)
43979
+ notify['recipients'].extend(getNormalizedEmailAddressEntity(shlexSplit=True, noLower=True))
43980
+ elif myarg == 'notifyrecoveryemail':
43981
+ parameters['notifyRecoveryEmail'] = True
43978
43982
  elif myarg == 'subject':
43979
43983
  notify['subject'] = getString(Cmd.OB_STRING)
43980
43984
  elif myarg in SORF_MSG_FILE_ARGUMENTS:
@@ -44390,7 +44394,7 @@ def createUserAddAliases(cd, user, aliasList, i, count):
44390
44394
  # (groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
44391
44395
  # [alias|aliases <EmailAddressList>]
44392
44396
  # [license <SKUID> [product|productid <ProductID>]]
44393
- # [notify <EmailAddressList>
44397
+ # [[notify <EmailAddressList>] [notifyrecoveryemail]
44394
44398
  # [subject <String>]
44395
44399
  # [notifypassword <String>]
44396
44400
  # [from <EmailAaddress>]
@@ -44408,7 +44412,7 @@ def doCreateUser():
44408
44412
  suffix = 0
44409
44413
  originalEmail = body['primaryEmail']
44410
44414
  atLoc = originalEmail.find('@')
44411
- fields = '*' if tagReplacements['subs'] else 'primaryEmail,name'
44415
+ fields = '*' if tagReplacements['subs'] else 'primaryEmail,name,recoveryEmail'
44412
44416
  while True:
44413
44417
  user = body['primaryEmail']
44414
44418
  if parameters['verifyNotInvitable']:
@@ -44449,7 +44453,9 @@ def doCreateUser():
44449
44453
  createUserAddToGroups(cd, result['primaryEmail'], addGroups, 0, 0)
44450
44454
  if addAliases:
44451
44455
  createUserAddAliases(cd, result['primaryEmail'], addAliases, 0, 0)
44452
- if notify.get('recipients'):
44456
+ if (notify.get('recipients') or (parameters['notifyRecoveryEmail'] and result.get('recoveryEmail'))):
44457
+ if parameters['notifyRecoveryEmail'] and result.get('recoveryEmail'):
44458
+ notify['recipients'].append(result['recoveryEmail'])
44453
44459
  sendCreateUpdateUserNotification(result, notify, tagReplacements)
44454
44460
  for productSku in parameters[LICENSE_PRODUCT_SKUIDS]:
44455
44461
  productId = productSku[0]
@@ -44492,7 +44498,7 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
44492
44498
  # [createifnotfound] [notfoundpassword (random [<Integer>])|blocklogin|<Password>]
44493
44499
  # (groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
44494
44500
  # [alias|aliases <EmailAddressList>]
44495
- # [notify <EmailAddressList>
44501
+ # [[notify <EmailAddressList>] [notifyrecoveryemail]
44496
44502
  # [subject <String>]
44497
44503
  # [notifypassword <String>]
44498
44504
  # [from <EmailAaddress>]
@@ -44521,7 +44527,7 @@ def updateUsers(entityList):
44521
44527
  else:
44522
44528
  checkImmutableOUs = False
44523
44529
  i, count, entityList = getEntityArgument(entityList)
44524
- fields = '*' if tagReplacements['subs'] else 'primaryEmail,name'
44530
+ fields = '*' if tagReplacements['subs'] else 'primaryEmail,name,recoveryEmail'
44525
44531
  for user in entityList:
44526
44532
  i += 1
44527
44533
  user = userKey = normalizeEmailAddressOrUID(user)
@@ -44597,7 +44603,10 @@ def updateUsers(entityList):
44597
44603
  entityActionPerformed([Ent.USER, user], i, count)
44598
44604
  if PwdOpts.filename and PwdOpts.password:
44599
44605
  writeFile(PwdOpts.filename, f'{userKey},{PwdOpts.password}\n', mode='a', continueOnError=True)
44600
- if parameters['notifyOnUpdate'] and notify.get('recipients') and notify['password']:
44606
+ if (parameters['notifyOnUpdate'] and notify['password'] and
44607
+ (notify.get('recipients') or (parameters['notifyRecoveryEmail'] and result.get('recoveryEmail')))):
44608
+ if parameters['notifyRecoveryEmail'] and result.get('recoveryEmail'):
44609
+ notify['recipients'].append(result['recoveryEmail'])
44601
44610
  sendCreateUpdateUserNotification(result, notify, tagReplacements, i, count, createMessage=False)
44602
44611
  break
44603
44612
  except GAPI.conditionNotMet as e:
@@ -44631,8 +44640,10 @@ def updateUsers(entityList):
44631
44640
  createUserAddToGroups(cd, result['primaryEmail'], addGroups, i, count)
44632
44641
  if addAliases:
44633
44642
  createUserAddAliases(cd, result['primaryEmail'], addAliases, i, count)
44634
- if notify.get('recipients'):
44643
+ if (notify.get('recipients') or (parameters['notifyRecoveryEmail'] and result.get('recoveryEmail'))):
44635
44644
  notify['password'] = notify['notFoundPassword']
44645
+ if parameters['notifyRecoveryEmail'] and result.get('recoveryEmail'):
44646
+ notify['recipients'].append(result['recoveryEmail'])
44636
44647
  sendCreateUpdateUserNotification(result, notify, tagReplacements, i, count)
44637
44648
  except GAPI.duplicate:
44638
44649
  duplicateAliasGroupUserWarning(cd, [Ent.USER, body['primaryEmail']], i, count)
@@ -0,0 +1,19 @@
1
+ # Steps to release a new GAM version
2
+ 1. In a final commit before release:
3
+ - [src/gam/__init.py](https://github.com/GAM-team/GAM/blob/main/src/gam/__init__.py) `__version___` value should be updated to the new version.
4
+ - [src/GamUpdate.txt](https://github.com/GAM-team/GAM/blob/main/src/GamUpdate.txt) should be updated with a high-level changelog.
5
+ - [wiki/GamUpdates.md](https://github.com/GAM-team/GAM/blob/main/wiki/GamUpdates.md) should be updated with same high-level changelog.
6
+ 2. The [build.yaml](https://github.com/GAM-team/GAM/blob/main/.github/workflows/build.yml) Github Action for final commit should complete successfully and creating a new dated Draft release.
7
+ - We should *NEVER* upload release files manually. Only release files automatically created and [attested](https://github.com/GAM-team/GAM/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official#github-attestation-linuxmacoswindows) as created by the Github Action should be used.
8
+ 3. Edit the Draft release:
9
+ - Create a new tag with the format: `vN.NN.NN` where N.NN.NN is the GAM release version.
10
+ - name the release "GAM N.NN.NN" where N.NN.NN is the GAM release version.
11
+ - Include the changelog details for the new version in details.
12
+ - leave "Set as pre-release" unchecked and "Set as the latest release" checked.
13
+ - Publish the release.
14
+
15
+ # TODO: Release Process Improvements
16
+ - copying changelog between GamUpdate.txt, GamUpdates.md and release description is manual and tedious. Automate it.
17
+ - copying version string from gam/__init__.py, changelogs and release details and tag in manual and tedious. Automate it.
18
+ - See if we can block releases with binaries not uploaded by GitHub Actions to further secure release pipelines.
19
+
@@ -10,7 +10,15 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
10
10
 
11
11
  See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
12
12
 
13
- ### 7.21.00
13
+ ### 7.21.02
14
+
15
+ GAM now builds on macOS 26 Tahoe and properly identifies the OS.
16
+
17
+ A custom build of the cryptography library is no longer needed for Windows arm64 builds as the project now releases their own build for the OS.
18
+
19
+ Upgrade to OpenSSL 3.5.3 latest
20
+
21
+ ### 7.21.01
14
22
 
15
23
  Replaced datetime, dateutil, calendar and iso8601 Python libraries with arrow library.
16
24
  This should have no performance impact; report any problems.
@@ -252,7 +252,7 @@ writes the credentials into the file oauth2.txt.
252
252
  admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
253
253
  admin@server:/Users/admin$ gam version
254
254
  WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
255
- GAM 7.21.00 - https://github.com/GAM-team/GAM - pyinstaller
255
+ GAM 7.21.01 - https://github.com/GAM-team/GAM - pyinstaller
256
256
  GAM Team <google-apps-manager@googlegroups.com>
257
257
  Python 3.13.7 64-bit final
258
258
  MacOS Sequoia 15.6.1 x86_64
@@ -990,7 +990,7 @@ writes the credentials into the file oauth2.txt.
990
990
  C:\>del C:\GAMConfig\oauth2.txt
991
991
  C:\>gam version
992
992
  WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
993
- GAM 7.21.00 - https://github.com/GAM-team/GAM - pythonsource
993
+ GAM 7.21.01 - https://github.com/GAM-team/GAM - pythonsource
994
994
  GAM Team <google-apps-manager@googlegroups.com>
995
995
  Python 3.13.7 64-bit final
996
996
  Windows-10-10.0.17134 AMD64
@@ -3,7 +3,7 @@
3
3
  Print the current version of Gam with details
4
4
  ```
5
5
  gam version
6
- GAM 7.21.00 - https://github.com/GAM-team/GAM - pyinstaller
6
+ GAM 7.21.01 - https://github.com/GAM-team/GAM - pyinstaller
7
7
  GAM Team <google-apps-manager@googlegroups.com>
8
8
  Python 3.13.7 64-bit final
9
9
  MacOS Sequoia 15.6.1 x86_64
@@ -15,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
15
15
  Print the current version of Gam with details and time offset information
16
16
  ```
17
17
  gam version timeoffset
18
- GAM 7.21.00 - https://github.com/GAM-team/GAM - pyinstaller
18
+ GAM 7.21.01 - https://github.com/GAM-team/GAM - pyinstaller
19
19
  GAM Team <google-apps-manager@googlegroups.com>
20
20
  Python 3.13.7 64-bit final
21
21
  MacOS Sequoia 15.6.1 x86_64
@@ -27,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
27
27
  Print the current version of Gam with extended details and SSL information
28
28
  ```
29
29
  gam version extended
30
- GAM 7.21.00 - https://github.com/GAM-team/GAM - pyinstaller
30
+ GAM 7.21.01 - https://github.com/GAM-team/GAM - pyinstaller
31
31
  GAM Team <google-apps-manager@googlegroups.com>
32
32
  Python 3.13.7 64-bit final
33
33
  MacOS Sequoia 15.6.1 x86_64
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
64
64
  Path: /Users/Admin/bin/gam7
65
65
  Version Check:
66
66
  Current: 5.35.08
67
- Latest: 7.21.00
67
+ Latest: 7.21.01
68
68
  echo $?
69
69
  1
70
70
  ```
@@ -72,7 +72,7 @@ echo $?
72
72
  Print the current version number without details
73
73
  ```
74
74
  gam version simple
75
- 7.21.00
75
+ 7.21.01
76
76
  ```
77
77
  In Linux/MacOS you can do:
78
78
  ```
@@ -82,7 +82,7 @@ echo $VER
82
82
  Print the current version of Gam and address of this Wiki
83
83
  ```
84
84
  gam help
85
- GAM 7.21.00 - https://github.com/GAM-team/GAM
85
+ GAM 7.21.01 - https://github.com/GAM-team/GAM
86
86
  GAM Team <google-apps-manager@googlegroups.com>
87
87
  Python 3.13.7 64-bit final
88
88
  MacOS Sequoia 15.6.1 x86_64
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes