From 8c092f4fa7a97f9912992344ed8146f0f1e6548a Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Fri, 14 Nov 2025 18:49:48 +0100 Subject: [PATCH 01/21] Add encrypted `secrets.properties` --- .configure | 5 ----- .configure-files/secrets.properties.enc | Bin 1424 -> 0 bytes .gitattributes | 6 +++++- secrets.properties | Bin 0 -> 1442 bytes 4 files changed, 5 insertions(+), 6 deletions(-) delete mode 100644 .configure-files/secrets.properties.enc create mode 100644 secrets.properties diff --git a/.configure b/.configure index bf5458276191..0a06e9dfd303 100644 --- a/.configure +++ b/.configure @@ -3,11 +3,6 @@ "branch": "trunk", "pinned_hash": "811d08531b187cfd2400e99d27214bba8906425d", "files_to_copy": [ - { - "file": "android/WCAndroid/secrets.properties", - "destination": "~/.configure/woocommerce-android/secrets/secrets.properties", - "encrypt": true - }, { "file": "android/WCAndroid/google-services.json", "destination": "WooCommerce/google-services.json", diff --git a/.configure-files/secrets.properties.enc b/.configure-files/secrets.properties.enc deleted file mode 100644 index d6de02973489f111822e673f7d6ba44ac72ea379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1424 zcmV;B1#kMahNf(>3n@OR%6_=vCIS;?QBDgVpu3~chyJVtUz$)Gi1gaOIg#Z(ieZ(_ zo@BZMiYAXe7m&%_nc#d_omQ=+2F<~%khn=>_Kc;<+6r2y-{)EK#j!iizTl4aRkHug zel&@z1+`<{e3Jt|{gJ;74<;`Xn2<8Ti>vSFz^aeqtVeijPOrS@u;L)pTsQb4hh6ze zkg($*Grihgyi?(OP^3bV>M(t)y=sOQIszdnJiT3z3VBkFbyPuLiW|h zVVS;=dCO(NAnqb=F+{HRel%EJ_M1kzM(^6qoZx-3x+k$~0^MZY+-9Nk6; zybbc`@-+U7&WwmD72_3SfnIxo3s-q(qu|i+6exv~I`+CcCp?#xFMr8;6ahrTUXci2 zMM`6i8sB>QDO!^Xs3!kwfoIqJPLNMF_7{C1jS=yH3NqhTHVU%}jQcKMXI}aaJQc3x zyx$Uz!N8UvXW3JIvilar6|`erSt(5uE(Wv3>Sy!dxx-t_wV={G9LMaA7cM@@UYtvj z;EgGd zUf!}GZzFhR@E+UpZ|ahAj6JnNElDiWe|7ANdOWt)sd&MJ;3cJQ109irNfiz(=-bmA zi_!{x4IuSLutlN{(seL3KE6z;y8@STfHjSvoAf||%zJ?V9J4h5NX<-9`fNWCu?ZAv zsDkS0X1QVhh=aOUFsx)oM!>yx0e#}CqRB$a8GX#n_DM*_4AQdrX^*8E@WihB%1}M& zC&y?SPro1G(Db`@ilf%@O1}E(@V$ix#$rpaZ$ZGA18&=Q4_N^sM?4`0^VeRA(|CBzkfj1I+i7Ig~;fwWmo9LD~$P1$HVP^4& zkQy54LN1AVQib(%_z*|_1QF{SRE1d}#g!4sFF{n9Ov!}W?|+c?3@^hiXX3|sm4Lo& zEOM!O=-UyGBJ+1mvsFYjs+jkgFxg18_B9gp>lMjdBXmZ85;Bb?R~&{N@w4)xgsamj zj=)*dTL@3pY74@x`i?emOU++Tqv5dsh-yY2s$YD~$eW)MmRQ-y-TO@MekpZYuub=C zxi5hY;g_8BsiO8;zZ5iOeRvU5P~7Jz^`>Rn8Gf-C-QnIF8{2BSK)_^0)`CrPMz%8_ zUzRJ{C5J+Ai4khwe;jzjxa<`Ui_wUx-=w-6?@T4-(x;4njfm~+1;Y`$An*c}dPM&S z1oQynTbJRoEVMkTn)~CNyySK?J+M?Fb;pk?N;{O8p2ox48sRS73iAU$Y$V6KNigv= e(bm{G5_(c`N&o1sv7J4O-LhCcC>`(uE!6xizk diff --git a/.gitattributes b/.gitattributes index 34a0b3db47d5..b1e92a658650 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,7 @@ RELEASE-NOTES.txt merge=union -.configure-files/*.enc binary +######################################### +# Secrets files encrypted with git-crypt +######################################### + +secrets.properties filter=git-crypt diff=git-crypt diff --git a/secrets.properties b/secrets.properties new file mode 100644 index 0000000000000000000000000000000000000000..baf712356cf0850d9157dacb1082e147af49a631 GIT binary patch literal 1442 zcmV;T1zq|8M@dveQdv+`02O>T*&Rp}n#&h$RYX3EuCtil(d0Q1qGu8nTO}YryCCP} z-PlQ$F{rC3&S5o+o{miTNyA(50IWxS)@X&51#JmVfF%bFGTNt}scdZCYN>7UB_5-k z?s(2SBONiJ;P1EN@+Os{WR1kqhfaRaZY2FW^rlBlkmO&}#hr%Q31x4JkeX$b05LAR z5jxyDrVC8hcSvQ=;_V!_3r*8NFUbL5bftere_v@@7x-9=`RiyZll1-(UUx=*ohh%q z8KqbH&h@>Qab4P`w8y6f>KLj121I(LP~_>*B+MUXL&zMa+64rASF`rdF4owGG^PTJ zE7uv_z~&)xI1c5YxAR#_K&l>^`;GM==<>n1z3n6PMSmk5+6k!ed}$8STfMGSMfa z>lm%x!=87&3j_WKI%|qR`VbpWk`4~MQa7N54R5>pXE2z%Z8(>-4pMCh`D{k--La4I zd>qJFG$MWloZ56t#0-3HH-k>$4KM40*)2$r-J-QvIQZL_anoUM+x4=9tCJ)X+*$mI z2T}-397*>!%o>7zReA;Xx~lX7Wh~MzL}lxnIfXdOSX7?Hq-z$S-yE8({iz6rTKj|r z9RO7%s4S*ml9Qvi`xftJE>e|gO}kYnrQ2QhVqYI3s14mx;a9#ZlCR*QE^_P@e4FWt zUiz`8EIhM(38C1447cXM{(pKBx6T;Bm?!T;AF!-~VZ*J)QG`bB8{$P{j~ir4o9K}T z#(C3RxTzvga<%4QhDn&!V<_3FOW1ssl&v9s0>wNk)Ju7Q)B2udP7C7W#v$Ntb(LXt zr5B`yiW`*j8k`b!{>ZeWIEwjij9TS#)apaeWgP_s&~)n@>1{C=n{_&{56bWM-BEl@ zA*;~iGkU!*3BIH0V3kbwGt&~u$4>`X+u8rb1h_%%#7bJG+!~=EuW(u zM#QQiHKkU(+X zR9}biM5bwe{X!R?Yyr3@Kg-!q7>iV2U7+J#%`-dJHph)|x{c(XNy+UJ0+id;T0$W) z=S}EUEoXcc)cVAQ{=^tNl_UNQaJ2qxqN9TTUzisbZnhFqS0k92oydk_P?e#Gs)Csf z8H2FCBdpQH2>=JVCN-gWEq`^2%^!QaWu%II2}aRunxY{Rq^A_(_!Vu5XKrTG;&uXX z6^V$wSb_zij{uph1p)|{IFf!FPEbt%Wo0l25(E1arR@j{+uIO+J`4?TC=$PU{Fx+2 zUD8VbLWswm&9y9Oo;QJ`F+FUKJ_ZM=Pxs?*ggJhb$lNzQKa^JW+q+Q*=is5V32>Jx zUd%qr89OKSu&Rsh=$tb@EvtOm{yV7m_0<19st7KLuD8lYab0_olpHNB4V>ilI!O#g zwzdU)DK$mW`#$nabQb(o*4_oz+W}phKRP!3aK#@~jzry`M&<6}1pur^IU~uhHS9hH z*ud7=c65#i0zdb+F~1+WKm1tro(ZRZsR{B%!_P`h_&V)^yl#L^k_jUa_gtAqNPHL9 znngF_zl%n;9CYc9@9iBD<%_a#P~ILmsw}$A1AuOy#ZCR6;zVpIr86{OJC*Pgsf1|c zrao*Rb5H2ipnH?H((1-mnezYw)kQ?KPH<&C65}_S)^U$m<5Vxu(rJxtpVdKjgshb> zhn}{93U9WBjmJ{HLPxqP%@HgKZ;TdM%yiS#?WPX*A!C(v(9DW(|n><&Y zve(o4kP#pO|KuPkn8j|RKNhXh5#qOL+fyDU44Re-qpl$O;c54V*q3EL?}Z7EIMCN1 wPHe&wFO&E5^&xUmXo$-s^4}QNju_W&r9jA$I^Y!@x*`9^$+Y-7Nis&bdInd@=l}o! literal 0 HcmV?d00001 From d57d039f62bc56af747e7945930a83bfe0a10de4 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Fri, 14 Nov 2025 18:51:10 +0100 Subject: [PATCH 02/21] Update `secrets.properties` path in `settings.gradle` --- settings.gradle | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/settings.gradle b/settings.gradle index fb4af8feee41..d3705b01754c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -23,7 +23,7 @@ ext { gradle.ext { isCi = System.getenv('CI')?.toBoolean() ?: false - secretsPath = "${System.getProperty("user.home")}/.configure/woocommerce-android/secrets/secrets.properties" + secretsPath = "secrets.properties" secretProperties = loadPropertiesWithFallback( logger, file("${rootDir}/defaults.properties"), @@ -40,7 +40,12 @@ static def loadPropertiesWithFallback(Logger logger, File fallbackFile, File pri def defaultProperties = readPropertiesFromFile(fallbackFile) def primaryProperties if (primaryFile.exists()) { - primaryProperties = readPropertiesFromFile(primaryFile) + try { + primaryProperties = readPropertiesFromFile(primaryFile) + } catch (Exception e) { + logger.warn("Failed to parse primary properties file: ${primaryFile}. Using fallback: ${fallbackFile}. Error: ${e}") + primaryProperties = new Properties() + } } else { logger.warn("Primary properties file not found: ${primaryFile}. Using fallback: ${fallbackFile}.") primaryProperties = new Properties() @@ -93,8 +98,14 @@ def checkForRemoteBuildCacheOptimizedExperience() { } def assertSecretsApplied() { - if (!file(gradle.ext.secretsPath).exists()) { - throw new GradleException("The build requested remote build cache, but secrets file is not found. Please run `bundle exec fastlane run configure_apply` to apply secrets.") + def secretsFile = file(gradle.ext.secretsPath) + if (!secretsFile.exists()) { + throw new GradleException("The build requested remote build cache, but the `secrets.properties` file is not found. See README.md for instructions on how to set those up.") + } + try { + readPropertiesFromFile(secretsFile) + } catch (Exception ex) { + throw new GradleException("The `secrets.properties` file exists but could not be read as a valid `.properties` file. This likely means it is still encrypted (git-crypt locked). Please decrypt it before building. See README.md for instructions.", ex) } } From 764ba714164089bc105aee127eef220607588fb8 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Fri, 14 Nov 2025 18:51:17 +0100 Subject: [PATCH 03/21] Update docs --- README.md | 9 +++++++-- docs/project-overview.md | 17 +++++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 60e4986fe6ed..36885c399ee7 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,13 @@ $ cd woocommerce-android ``` -1. Copy `defaults.properties` to the secrets directory: `cp defaults.properties ~/.configure/woocommerce-android/secrets/secrets.properties`. See the [Configuration Files](docs/project-overview.md#configuration-files) section for a breakdown of the properties. -1. Generate the developer oauth2 tokens. These values get copied into the `~/.configure/woocommerce-android/secrets.properties` file in the next step. See the [OAuth2 Authentication](docs/project-overview.md#oauth2-authentication) section for details. +1. If you are a developer at Automattic: + 1. Make sure you have `git-crypt` installed (`brew install git-crypt`) + 1. Search for "WooCommerce Android git-crypt encryption key" in our Secret Store, and copy the Base64 value in your clipboard + 1. Run `git-crypt unlock <(pbpaste | base64 -d)` to decrypt the encrypted files (including `secrets.properties`) +1. If you are an external contributor: + 1. Generate developer OAuth2 tokens. See the [OAuth2 Authentication](docs/project-overview.md#oauth2-authentication) section for details. + 1. Edit `defaults.properties` and adjust the values as needed—especiallyincluding `wp.oauth.*` ones. See the [Configuration Files](docs/project-overview.md#configuration-files) section for a breakdown of the properties. 1. In Android Studio, open the project from the local repository. This will auto-generate `local.properties` with the SDK location. 1. Optional: Go to Tools → Device Manager and create an emulated device. 1. Run. (Creates a default virtual device if you skipped the previous step) diff --git a/docs/project-overview.md b/docs/project-overview.md index dcdb5c572ca5..ab89e1955806 100644 --- a/docs/project-overview.md +++ b/docs/project-overview.md @@ -13,11 +13,8 @@ When creating your application, you should select "**Native client**" for the ap The "**Website URL**", "**Redirect URLs**", and "**Javascript Origins**" fields are required but not used for the mobile apps. Just use "**[https://localhost](https://localhost)**". -Once you've created your application in the [applications manager][wp-com-apps], you'll -need to update the `wc.oauth.app_id` and `wc.oauth.app_secret` fields in `secrets.properties`. -See [setup instructions][setup] for more details about secrets file. Then you can compile and run the app on a device or an emulator and -try to login with a WordPress.com account. Note that authenticating to WordPress.com via Google is -not supported in development builds of the app, only in the official release. +Once you've created your application in the [applications manager][wp-com-apps], you'll need to update the `wc.oauth.app_id` and `wc.oauth.app_secret` fields in `defaults.properties` (copied from `defaults-example.properties`). See [setup instructions][setup] for more details. +Then you can compile and run the app on a device or an emulator and try to login with a WordPress.com account. Note that authenticating to WordPress.com via Google is not supported in development builds of the app, only in the official release. Note that credentials created with our [WordPress.com applications manager][wp-com-apps] allow login only and not signup. New accounts must be created using the [official app][wp-app] @@ -35,7 +32,15 @@ Read more about [OAuth2][oauth] and the [WordPress.com REST endpoint][wp-api]. #### `secrets.properties` -The `secrets.properties` file is used to store sensitive information that should not be checked into version control. This file is located at `~/.configure/woocommerce-android/secrets/secrets.properties`. +The `secrets.properties` file is used to store sensitive information that should not be checked into version control in clear text. +This file is encrypted (using `git-crypt`), and only developers working at Automattic have the decryption key. + +If you are a developer working at Automattic, ensure you followed those instructions once after cloning the repo: + 1. Make sure you have `git-crypt` installed (`brew install git-crypt`) + 1. Search for "WooCommerce Android git-crypt encryption key" in our Secret Store, and copy the Base64 value in your clipboard + 1. Run `git-crypt unlock <(pbpaste | base64 -d)` to decrypt the encrypted files (including `secrets.properties`) + +If you are an external contributor, provide those variables in your `defaults.properties` instead: | Property | Description | |:---------------------------|:------------| From 8683c1c75869997323c327921a06320bc70a5b29 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Fri, 14 Nov 2025 18:54:00 +0100 Subject: [PATCH 04/21] Add encrypted `sentry.properties` --- .configure | 5 ----- .configure-files/sentry.properties.enc | Bin 144 -> 0 bytes .gitattributes | 1 + .gitignore | 2 -- sentry.properties | Bin 0 -> 152 bytes 5 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 .configure-files/sentry.properties.enc create mode 100644 sentry.properties diff --git a/.configure b/.configure index 0a06e9dfd303..260f05ad2e1b 100644 --- a/.configure +++ b/.configure @@ -8,11 +8,6 @@ "destination": "WooCommerce/google-services.json", "encrypt": true }, - { - "file": "android/WCAndroid/sentry.properties", - "destination": "sentry.properties", - "encrypt": true - }, { "file": "android/debug.keystore", "destination": "~/.configure/woocommerce-android/secrets/debug_a8c.keystore", diff --git a/.configure-files/sentry.properties.enc b/.configure-files/sentry.properties.enc deleted file mode 100644 index 526952438d12e4f2de7a6b6efad57fccb55cf41c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmV;B0B`>gm56oth7HqR$64LG8f%w5eUQH+qogJvl<|A|Gk#wCRH%p2N z6kVdPRshOeRc)SEbjC#8rpYoR=XGWR#UV(*M#$#bZj^~pF-xQA!xA2fPL8M?74V3_ yYf0%s*j`ReNqp7`G2W$8t^_=>zWoI{u_?-2P&PTk7Tgk#Og&p%OT6UQ50gi23PWT7 diff --git a/.gitattributes b/.gitattributes index b1e92a658650..666ce33473fb 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,3 +5,4 @@ RELEASE-NOTES.txt merge=union ######################################### secrets.properties filter=git-crypt diff=git-crypt +sentry.properties filter=git-crypt diff=git-crypt diff --git a/.gitignore b/.gitignore index 71ab405bd2bd..126c4aa8b91b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,8 +25,6 @@ developer.properties # Crash Logging Configuration fabric.properties -# Sentry -sentry.properties # Local configuration file (sdk path, etc) local.properties diff --git a/sentry.properties b/sentry.properties new file mode 100644 index 0000000000000000000000000000000000000000..921722cb7bd3577f860f117bf46effade71d138c GIT binary patch literal 152 zcmV;J0B8RIM@dveQdv+`0I8XNHucz%T zHIr!1W?-mFqgVndm`Gp`^Wf)2 Date: Fri, 14 Nov 2025 18:59:03 +0100 Subject: [PATCH 05/21] Add encrypted `google-services.json` --- .configure | 5 ----- .configure-files/google-services.json.enc | Bin 3872 -> 0 bytes .gitattributes | 1 + .gitignore | 3 --- WooCommerce/google-services.json | Bin 0 -> 3885 bytes 5 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 .configure-files/google-services.json.enc create mode 100644 WooCommerce/google-services.json diff --git a/.configure b/.configure index 260f05ad2e1b..f1bb337a8172 100644 --- a/.configure +++ b/.configure @@ -3,11 +3,6 @@ "branch": "trunk", "pinned_hash": "811d08531b187cfd2400e99d27214bba8906425d", "files_to_copy": [ - { - "file": "android/WCAndroid/google-services.json", - "destination": "WooCommerce/google-services.json", - "encrypt": true - }, { "file": "android/debug.keystore", "destination": "~/.configure/woocommerce-android/secrets/debug_a8c.keystore", diff --git a/.configure-files/google-services.json.enc b/.configure-files/google-services.json.enc deleted file mode 100644 index a8d92f5f1ecaea0fb09418fe98d5503501d17423..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3872 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 diff --git a/.gitattributes b/.gitattributes index 666ce33473fb..2241bfd814d5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,3 +6,4 @@ RELEASE-NOTES.txt merge=union secrets.properties filter=git-crypt diff=git-crypt sentry.properties filter=git-crypt diff=git-crypt +google-services.json filter=git-crypt diff=git-crypt diff --git a/.gitignore b/.gitignore index 126c4aa8b91b..ac0e45262a61 100644 --- a/.gitignore +++ b/.gitignore @@ -70,9 +70,6 @@ projectFilesBackup/ # External native build folder generated in Android Studio 2.2 and later .externalNativeBuild -# Google Services (e.g. APIs or Firebase) -google-services.json - # Silver Searcher ignore file .agignore diff --git a/WooCommerce/google-services.json b/WooCommerce/google-services.json new file mode 100644 index 0000000000000000000000000000000000000000..76af8b26d3d37b5cb4d0ae7ed9051cd094c6fb49 GIT binary patch literal 3885 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 v+U)`oKrtta#%cvHxVh{;Ze%VX1}g|V Date: Fri, 14 Nov 2025 19:04:07 +0100 Subject: [PATCH 06/21] Add encrypted `debug.keystore` --- .configure | 5 ----- .configure-files/debug.keystore.enc | Bin 1264 -> 0 bytes .gitattributes | 1 + debug.keystore | Bin 0 -> 1282 bytes secrets.properties | Bin 1442 -> 1400 bytes 5 files changed, 1 insertion(+), 5 deletions(-) delete mode 100644 .configure-files/debug.keystore.enc create mode 100644 debug.keystore diff --git a/.configure b/.configure index f1bb337a8172..159bb97f1623 100644 --- a/.configure +++ b/.configure @@ -3,11 +3,6 @@ "branch": "trunk", "pinned_hash": "811d08531b187cfd2400e99d27214bba8906425d", "files_to_copy": [ - { - "file": "android/debug.keystore", - "destination": "~/.configure/woocommerce-android/secrets/debug_a8c.keystore", - "encrypt": true - }, { "file": "android/automattic_upload.jks", "destination": "WooCommerce/upload.jks", diff --git a/.configure-files/debug.keystore.enc b/.configure-files/debug.keystore.enc deleted file mode 100644 index 55ef352b6f37ffa453075489dee90937f5152f9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1264 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 GzWwV&#JX(& literal 1442 zcmV;T1zq|8M@dveQdv+`02O>T*&Rp}n#&h$RYX3EuCtil(d0Q1qGu8nTO}YryCCP} z-PlQ$F{rC3&S5o+o{miTNyA(50IWxS)@X&51#JmVfF%bFGTNt}scdZCYN>7UB_5-k z?s(2SBONiJ;P1EN@+Os{WR1kqhfaRaZY2FW^rlBlkmO&}#hr%Q31x4JkeX$b05LAR z5jxyDrVC8hcSvQ=;_V!_3r*8NFUbL5bftere_v@@7x-9=`RiyZll1-(UUx=*ohh%q z8KqbH&h@>Qab4P`w8y6f>KLj121I(LP~_>*B+MUXL&zMa+64rASF`rdF4owGG^PTJ zE7uv_z~&)xI1c5YxAR#_K&l>^`;GM==<>n1z3n6PMSmk5+6k!ed}$8STfMGSMfa z>lm%x!=87&3j_WKI%|qR`VbpWk`4~MQa7N54R5>pXE2z%Z8(>-4pMCh`D{k--La4I zd>qJFG$MWloZ56t#0-3HH-k>$4KM40*)2$r-J-QvIQZL_anoUM+x4=9tCJ)X+*$mI z2T}-397*>!%o>7zReA;Xx~lX7Wh~MzL}lxnIfXdOSX7?Hq-z$S-yE8({iz6rTKj|r z9RO7%s4S*ml9Qvi`xftJE>e|gO}kYnrQ2QhVqYI3s14mx;a9#ZlCR*QE^_P@e4FWt zUiz`8EIhM(38C1447cXM{(pKBx6T;Bm?!T;AF!-~VZ*J)QG`bB8{$P{j~ir4o9K}T z#(C3RxTzvga<%4QhDn&!V<_3FOW1ssl&v9s0>wNk)Ju7Q)B2udP7C7W#v$Ntb(LXt zr5B`yiW`*j8k`b!{>ZeWIEwjij9TS#)apaeWgP_s&~)n@>1{C=n{_&{56bWM-BEl@ zA*;~iGkU!*3BIH0V3kbwGt&~u$4>`X+u8rb1h_%%#7bJG+!~=EuW(u zM#QQiHKkU(+X zR9}biM5bwe{X!R?Yyr3@Kg-!q7>iV2U7+J#%`-dJHph)|x{c(XNy+UJ0+id;T0$W) z=S}EUEoXcc)cVAQ{=^tNl_UNQaJ2qxqN9TTUzisbZnhFqS0k92oydk_P?e#Gs)Csf z8H2FCBdpQH2>=JVCN-gWEq`^2%^!QaWu%II2}aRunxY{Rq^A_(_!Vu5XKrTG;&uXX z6^V$wSb_zij{uph1p)|{IFf!FPEbt%Wo0l25(E1arR@j{+uIO+J`4?TC=$PU{Fx+2 zUD8VbLWswm&9y9Oo;QJ`F+FUKJ_ZM=Pxs?*ggJhb$lNzQKa^JW+q+Q*=is5V32>Jx zUd%qr89OKSu&Rsh=$tb@EvtOm{yV7m_0<19st7KLuD8lYab0_olpHNB4V>ilI!O#g zwzdU)DK$mW`#$nabQb(o*4_oz+W}phKRP!3aK#@~jzry`M&<6}1pur^IU~uhHS9hH z*ud7=c65#i0zdb+F~1+WKm1tro(ZRZsR{B%!_P`h_&V)^yl#L^k_jUa_gtAqNPHL9 znngF_zl%n;9CYc9@9iBD<%_a#P~ILmsw}$A1AuOy#ZCR6;zVpIr86{OJC*Pgsf1|c zrao*Rb5H2ipnH?H((1-mnezYw)kQ?KPH<&C65}_S)^U$m<5Vxu(rJxtpVdKjgshb> zhn}{93U9WBjmJ{HLPxqP%@HgKZ;TdM%yiS#?WPX*A!C(v(9DW(|n><&Y zve(o4kP#pO|KuPkn8j|RKNhXh5#qOL+fyDU44Re-qpl$O;c54V*q3EL?}Z7EIMCN1 wPHe&wFO&E5^&xUmXo$-s^4}QNju_W&r9jA$I^Y!@x*`9^$+Y-7Nis&bdInd@=l}o! From 2921a67126b130d7f0e6f7dba278093413793f2c Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Fri, 14 Nov 2025 19:26:25 +0100 Subject: [PATCH 07/21] Add encrypted `firebase.secrets.json` --- .configure | 5 ----- .configure-files/firebase.secrets.json.enc | Bin 2384 -> 0 bytes .gitattributes | 1 + WooCommerce/build.gradle | 2 +- fastlane/Fastfile | 9 ++++++--- firebase.secrets.json | Bin 0 -> 2395 bytes 6 files changed, 8 insertions(+), 9 deletions(-) delete mode 100644 .configure-files/firebase.secrets.json.enc create mode 100644 firebase.secrets.json diff --git a/.configure b/.configure index 159bb97f1623..dc4a3b4c4721 100644 --- a/.configure +++ b/.configure @@ -12,11 +12,6 @@ "file": "android/WCAndroid/google-upload-credentials.json", "destination": "~/.configure/woocommerce-android/secrets/google-upload-credentials.json", "encrypt": true - }, - { - "file": "android/WCAndroid/firebase.secrets.json", - "destination": ".configure-files/firebase.secrets.json", - "encrypt": true } ], "file_dependencies": [] diff --git a/.configure-files/firebase.secrets.json.enc b/.configure-files/firebase.secrets.json.enc deleted file mode 100644 index 9a004dc5f58cc090f37f3fa20723fd3eda693839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2384 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 Date: Fri, 14 Nov 2025 19:47:15 +0100 Subject: [PATCH 08/21] Add encrypted `upload.jks` --- .configure | 5 ----- .configure-files/automattic_upload.jks.enc | Bin 2144 -> 0 bytes .gitattributes | 3 ++- .gitignore | 3 --- WooCommerce/upload.jks | Bin 0 -> 2164 bytes 5 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 .configure-files/automattic_upload.jks.enc create mode 100644 WooCommerce/upload.jks diff --git a/.configure b/.configure index dc4a3b4c4721..cc56ef34a525 100644 --- a/.configure +++ b/.configure @@ -3,11 +3,6 @@ "branch": "trunk", "pinned_hash": "811d08531b187cfd2400e99d27214bba8906425d", "files_to_copy": [ - { - "file": "android/automattic_upload.jks", - "destination": "WooCommerce/upload.jks", - "encrypt": true - }, { "file": "android/WCAndroid/google-upload-credentials.json", "destination": "~/.configure/woocommerce-android/secrets/google-upload-credentials.json", diff --git a/.configure-files/automattic_upload.jks.enc b/.configure-files/automattic_upload.jks.enc deleted file mode 100644 index e04c021b8b5f970709c16cb0d72011013411238f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2144 zcmV-m2%qU<^jh)nXY$Yp&EB|ReY_-*wYD~KvJQ5ix zO9?R6HBNfEKR^H9FfejQsWi-o2fK-JC$c+Uc*_b@YVSUA)&w0TzAn@OS!6ln7ri8{ z%AxT=!eHGbX9OYn62I|?E@LscPg$V*S%(rPg>#gcU{XQM>vzL`=&0_)^h=dtc>Fj8 z8`?MN1rckKZHd!J1Y4UqOpiEeW(Ml}3yIv;G5Ru^#g{_wG7bemA?AP&61KTa=e*3P z&B(@C;+?DGKY zf!%Vy|2~#e_g*%+hiC;TexWYVSY2pWVrd->JvM?f9hgeCMyKW$n(t z@?3-(fbVy^4wy3h(9FqRN}&}|qdYY95aEj*>4L>~3zxqGd)%u}Yo3@-iI{Hq1SmHV zbe)f8eQ{i?#pUS})f%?|!g{Yz-9S7n1(d;y0&F+J4JQoC+@mm z`ZWe|G->V#jGy?1Ml%1h06)FRxzbzPD{7MSzqQwJ^5-QzH-!cOj@K%Gs&GDedDgYL zL~}HUl_OfB1I{m>LW9|U2peMRC|ae1j-=BGmcmhHU}aiVc#)f9L{Z5w@H0g&#&m$> zR2ducrniA`vT`7GQ%{x60jL74<-o7e&0#Dh5Z2KoQ~Oxf@y%_q5vEWeMNUH*Z3u*! zrGQ|lv^G}ZvD4Ygwo6`MYU$i|5mZ)ZhHBspglE&8Mo*(?>bo^)mvlY?ghC*ZyWwaF^z zBVlJRkn8_WAq>#qgkZ+CbN~bZ+4;gIkB2lx0%0%wHwAU>A;>7Or9MNM@pv}+u|}+g zn_--0(K)y~SsL7FJ|2=taKOn9wfs7y-ej4VoByK8hCXg)_$DjK!K=|w&?Js34lD5t z&!&n3ntn0Jr~`{jDawp_?r(D+MWa7>E*|F-aTau|WAJ0lJC)HRxl=_eSePd#fev!O z7X0yQZ=BS2*GkLq8!!5ni|-Y}&F$~Uf~~*xcl1b|o&VayGQ`rX=Ppu44y6aLgGrrI zl@BqlzYMfV7NmV?5U*c^o%)}->H%e9n6=1ZJ==R?-5L3SM)T2&9cC?TU)t5C zafoK-uxH(#H3CyGcazb7l-v+d16>p&q*!!@_R_GB*lgE7K_&**ONgwrtZLgD|4wLE z4eiCq08*3?a`6Yzt%GpEfsOJG299!Ao=H78C;;iK&2hzlL|X-Xz-ES7iFY&=719h;4|U~YJ)VUE~zXM?(4&zja<%l=Z` zj~YXHWe3USXScpq`G3QO<_vba17bUZt!(ly=2H_afW=Ul@X~l86ciHzKZ@*qQyn?8 zVaC7m^V5n5ZX*aS!q%$+eusuoTAt8cARb@iZtyBgip8Y((T5RF!@_m2D24%li)rf$ z{}Qks0sG^#I2Zytb`TVakM0hI_=#Z3wal%sOIe!U@W8sCUrR!ooq$h8VWUVO=Q{|}w zZjiZ{m2=RJ1fC>O--Erf*qK^|#^x4mdS>p1jkBWmtMLHE3l>|I@MBCitNENXTc_jE zixH5q8LpNeX42Sm;Xo%xCJGA6>jbMaPJZ$+iraUdk~btQXj7$K>+1&PT?{MRI~W<> W1gYg*=UJsK&ejcl%P}e(&`V@G?HG0d diff --git a/.gitattributes b/.gitattributes index 6ac650a519d7..23c52c22b965 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7,5 +7,6 @@ RELEASE-NOTES.txt merge=union secrets.properties filter=git-crypt diff=git-crypt sentry.properties filter=git-crypt diff=git-crypt google-services.json filter=git-crypt diff=git-crypt -*.keystore filter=git-crypt diff=git-crypt firebase.secrets.json filter=git-crypt diff=git-crypt +*.keystore filter=git-crypt diff=git-crypt +*.jks filter=git-crypt diff=git-crypt diff --git a/.gitignore b/.gitignore index ac0e45262a61..57357f278633 100644 --- a/.gitignore +++ b/.gitignore @@ -64,9 +64,6 @@ captures/ # Android Studio backup files projectFilesBackup/ -# Keystore files -*.jks - # External native build folder generated in Android Studio 2.2 and later .externalNativeBuild diff --git a/WooCommerce/upload.jks b/WooCommerce/upload.jks new file mode 100644 index 0000000000000000000000000000000000000000..b922c9efb45c9c037407129934475e33eda14f62 GIT binary patch literal 2164 zcmV-)2#fasM@dveQdv+`0ILus%VQ!$2ITw9YWUNr+^rJ_oIjzr*x37vwO#WX?={;(F3cDjsw*MLma#I?1P%*2j3Y$A4mm-WPP=3GRp( z3u49b5;c=1mZMPqtR}dHfgXg*o<`Ye$7UyNO8aNyO@roy>}?@{oaEBhgR+mVV5e4m zgh-YTk)db!p%;jSFYo`Ese7{!1~p^Xg~pZ=JEa6<@8U zAciN~QdvykITf!y?Tk2ozI8z|QY$!2APN!qAf^d31?ZC)LF5KJ?~? z+`9MJ-%HX;OV85A7sF;A=StYm??sDtz8aa-0mIlXuKz*c(D9 z-woo#YqxtX*1&w*eU#?>catO!fw`&j>Yn9SfRz9+s{3;vcr%PG*@w?IvoM&#xy>Lf zDMB8N$@HoHjwXYZP?&y&q7Li;GSa}#|HT8}bP4+FVW&%@zj{ z$+XDjMNZ~}WPCpiS_OkEM2z9kRAA~6sY&a@f%tPKv9$#x=iTe+Rdqpf>BrA5dMY60 zE|OyZv>XI8!uYI-=!4$6ic%czM<>b)GQ7FxwAS`rPm;ad68j$j2Z|csxkKDG>+< z=S}6QoW<3dXVr?!>~dw0pw~v>@CTjs2>2eH+TnTdsh6+8c^N|ud@ZBE5bVkh{z`(; z|KFk#bX=AGc_cON zv)nauVKXmMk`1!lAxl!_mkHIZKp6>FGwURw`ZQ%G%I>n6sBI-eDk;eMXWZRK1gXMWAuxbjS4*X;=hrre_LB1}rus?i}~BG`q>vC&qib z-6cJ)@N_Kg+)X#_-3;R5P^dpN^?7S4J_@>+C3{CX^nZ?pe}gMBBszZAD}RnZ$G za<}rQOGp<{xCh*I^f_Pv=>;|yhBUHQ#WE3@#NK|Fk~u~Qh~K{m*|9BGXkX-K7a}TW zq{<^Z@<@>2IKV>N1u^uPZ1aH`AuhNDo8^U6`}%IBT*zLwQ27voZj(>lg$+tCcF})h zV~is-{_LTL>{i>E8q=P=ZN!9tO#>x5C9w!S<(|ZPazr1RLz|EEyudv5EnF5$TO>eE zx?ZWqQEjy>VSy-&xU0kDuJh>P1ZEg9ru%t5sR|@6jXKofIe2GE@93$c&(r$0gnLr z56G=$V68rrbfr?oYxnTBL`32+tZW-WVT6O9-zg=d?{41JX+9E)61W=8euq$O&!Sb? zu7Kv=m6)0KW<8MT8E2etX<8{hTW#Ib=ElJ~4BsH2ir|ciH6d%OU_R!lgiw-;=4qze zD31@b7tFPw=IEGAWc^!h44=oHodTw~x`9q8z;cRJIFJMr7<@u)bFz^Igd7{Fh(h68 zJU92qCN!|*GodtNO^d6;I-eKQQkpQ803}lH4VkW+N<1@P(-_5wZ2l0UmG7@>b+VIt zc+zP5@Et?SFO6SI_XItu#Q!JjbFpNU8kJjVJX4OOIEYPF?O> zksMbfb(scfkn#kR>zqT{vE^~L!f5NM)OaezhSrk_Fhk;01(!7iPAQ(IR q<*;bfTn_YKR|mTo{MGlz!_aQPZRA6V@gFIzDcU&<`k Date: Fri, 14 Nov 2025 19:54:55 +0100 Subject: [PATCH 09/21] Add encrypted `google-upload-credentials.json` --- .configure | 5 ----- .../google-upload-credentials.json.enc | Bin 2368 -> 0 bytes .gitattributes | 1 + .gitignore | 5 ----- fastlane/Fastfile | 2 +- google-upload-credentials.json | Bin 0 -> 2385 bytes 6 files changed, 2 insertions(+), 11 deletions(-) delete mode 100644 .configure-files/google-upload-credentials.json.enc create mode 100644 google-upload-credentials.json diff --git a/.configure b/.configure index cc56ef34a525..8084ad4f2157 100644 --- a/.configure +++ b/.configure @@ -3,11 +3,6 @@ "branch": "trunk", "pinned_hash": "811d08531b187cfd2400e99d27214bba8906425d", "files_to_copy": [ - { - "file": "android/WCAndroid/google-upload-credentials.json", - "destination": "~/.configure/woocommerce-android/secrets/google-upload-credentials.json", - "encrypt": true - } ], "file_dependencies": [] } \ No newline at end of file diff --git a/.configure-files/google-upload-credentials.json.enc b/.configure-files/google-upload-credentials.json.enc deleted file mode 100644 index de5014cad2681b7fc8c30bec0dc136c232ec73a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2368 zcmV-G3BUHnRH)5*rQxipG&QL2r*;JDHH*2ET-q<= zXKXX25N>Y`e~nNVf9rlra}`kb7}OCNh}eCRD&k+ial$YuhHUseBffUkOI0k|b0VnZ zUj9EEO!QBY+lFy?^(OULIWD4;V-`p1Yc)>>l_c0g)0gf-uU3!8j80o&zJq;Er6{nn zuC@(8D|$Cm3Wae*&}wC)V@Iya2)!+k0w?PvDEIHCGI!ebAJ30xtJX;wmedV*XOA5+ zzcjEA#m?Y$?AqZ@sRP|#HbfFT9&oMxY+=;`cu>}g&q~JWZ`4IWK7DKVl=>AtFzIAz zeT|NE^V;VHfBB{ncaIqy!3bxVI(S-Zy#kDe2r4^*_SP+i4i~lWDM+^yZCI-XO#_`U2Jhswo0(4ioQD5bdqel0Lj6V660yselk<6nvZ_7duoByd6 z+m)}%Dc(xQrQ{5!Yz787Ya_lOm94su5t^ts*!*s`^?*gAW^=AWG4^%z=gKius6-^4 zySa;9R&*##w2YNaNL_pr-_@_w$n{yY2w#V|*d%l>=8xH-@BRSa8#Ivn$P4p-B6B`C zf*wx9hfH{Ls>Z#d$(`;r%y>@|Tt;08i#%&^7gnSbgWCB{`->LX?C%+ zE4yXJ-*%P>jFWP4Awj?FInl-8FW)~eZ*bZFS6;W?>yfUe} z(6fl#`-iGVo(orZB(mhf|L@RrOP!Hw*DK9&vgm)FH%exL$CpYeY+7{@2L7t5`C1%A z{7oSxj2q40prDVj@YPoK0VK*19>Br-O994|m@#YzzI~JShJa`onrG+1upDA$A@E+| zB^7m>(h9`aVWK2^e`KEAk*!tTC#a%NmW)VQ%~!H4I|})5)zm!*ZKP_AB4(m4#l4qv z)Lk=E%F(ze!0GzE2y(`n*@b>% z#zv0xD(K}suPEw%WD{stsl=5E_EWqgRo7kgR1a*Rxkl$=E~Onf z`7i0!g7-T)3}DN6R&)|Kikr0N-7UV0d4hD>h4m2#yTO{>jI89}&H;6QuOEz4)(J;g zE$-jc866&anDn?zA02}wrwHuN3$W`W8UYxC##=T|%J*8!yf=gC7=JWjm_ax2$6Pog ziV`)T1!9rCmYeSsR>EP_3r(TEEg__F3=i}oIp((}zK zJ6#~nl9U00r|?>tUe|6_7Gz8<(F%*?}KI9$<`8&RM29@AR>Mnc5ptMPTHg{kG)EG{9|Kec&vqixiQ z@+lnB1x4?3T^N(!iU*_u`Z*%P-bu|MOJa-i&szHCi_%C@64^G&LB-bL4tcH2cNQPU zE%k%fP1B3YY-g>xU}=5?+CyvJna$gHKvL;sAe(Cl5@hA#Bs~g7Wkn;tuj=89pG18X zb!047=f>_i<@*eI%%{Q(nCdDXo@cfs;ZBSex6NnQ@hJKZB8_4O$kmA4K>-MO!%j$i mKz4Y!YwJb;6Uex}Lr>GpK7Au38U#1_1Ocyhd3RsQL+ihI0jH1v diff --git a/.gitattributes b/.gitattributes index 23c52c22b965..315b670c08c7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,5 +8,6 @@ secrets.properties filter=git-crypt diff=git-crypt sentry.properties filter=git-crypt diff=git-crypt google-services.json filter=git-crypt diff=git-crypt firebase.secrets.json filter=git-crypt diff=git-crypt +google-upload-credentials.json filter=git-crypt diff=git-crypt *.keystore filter=git-crypt diff=git-crypt *.jks filter=git-crypt diff=git-crypt diff --git a/.gitignore b/.gitignore index 57357f278633..b36f28e4695d 100644 --- a/.gitignore +++ b/.gitignore @@ -80,7 +80,6 @@ projectFilesBackup/ fastlane/README.md fastlane/report.xml fastlane/.env -google-upload-credentials.json fastlane/screenshots fastlane/promo_sceenshots # This is a byproduct of the screenshots composition process @@ -98,10 +97,6 @@ local-builds.gradle # Everything without a .enc extension is ignored .configure-files/* !.configure-files/*.enc -# This secret is not part of the repository anymore, but we keep it in the -# gitignore for retrocompatibility, so that it won't appear as a new file and -# be accidentally checked in the repository. -google-upload-credentials.json # Kotlin .kotlin/ diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 5d891a44eaab..8f34cb935ebd 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -80,7 +80,7 @@ DEFAULT_BRANCH = 'trunk' REPOSITORY_NAME = 'woocommerce-android' GH_ORG_NAME = 'woocommerce' -UPLOAD_TO_PLAY_STORE_JSON_KEY = File.join(Dir.home, '.configure', 'woocommerce-android', 'secrets', 'google-upload-credentials.json') +UPLOAD_TO_PLAY_STORE_JSON_KEY = File.join(PROJECT_ROOT_FOLDER, 'google-upload-credentials.json') SUPPORTED_LOCALES = [ { glotpress: 'ar', android: 'ar', google_play: 'ar', promo_config: {} }, diff --git a/google-upload-credentials.json b/google-upload-credentials.json new file mode 100644 index 0000000000000000000000000000000000000000..2e4689258fa5ae1193157e31e216e07f2f3bf549 GIT binary patch literal 2385 zcmV-X39j}4M@dveQdv+`0NaG+&i>nMbdpVw4S#q;b zRtFnqYae+BftununZGii<0MOow!Fnl8@VwZiVU0HY)5aCA1AjT*0y3CK;;w3IEU zOr#Ga+YE{VwPgFg@d3}$(XdhjMco0J9}jw$b+wE+q7ep=KAT^Mz1T67hVkHMJA;^c z

V}C|DF~lG$V2L3CU*H~a6Skk{Ci824>EH}vtjARdOST?){x4k73X7zn7{>A6H3 z+$`J&cerF%>g_FP2U%Jy=yhl_LEZ^Auypi7%5UlgZt&kSXu~p55U`0{NxDsTQ!_2b z;Wx=ElT9J+y2DPpcsGZy0SVO;{SVUbSadw2hvbRl$s1#+et&Dqp2*RIN#2#qZwO(k zdRRD=R<7#d#u=A|vs6=ef4B$0nE2Hjf9iowrZ*C{2@5vp?SVj=JEw5h3z$6z9S6;s zb`_c$fu6{@b2GJ_Tq?YkXM$Hz;NoDuS99v8$G`=fC6>BJ<

o~*4A4-pMw<0`r6 z_{2>P0Uxn@GDUpu0h-BF33A;aOryZZ?IrSDujLVBmVi31np5>$Sq0=r=$Z$g>pm$^uA4+>!@gCuAim#ZEM3qQ0ShO!lA8Uu9tJWB2eX}-cOZ=09!!G8@~@rp z)_5Kc6Wm!|_NHUlj9i*0;|!uwe%howFO^iUbYN!p(v9j=-ZMpUCub3k`%RIcI^p?o zg*q1gGQi>xQeJ?pV{}K+1R!d-golvHE$N;5DLHIsEm!O4=bmz4A}?22KJNv}IfHU& zdc~QPpCRb?SPf9>bcFXI)F{Xu8cRd7`wima%qd(s`yaHQG5Uu2w-&@QDdz5Xn|tLaVLc9L2FU;!Ex4BNZ{A`4uTYJtFRhc8{d6g0zGEK8v4vz*vZI zoQ!&Ooy#TJ;iS(mCaYnnD+JrOv<8mhXLvZtIgfBV&-gB`LVGe}KR;%q8_SvJB4|%l zF0t$O6Bo${>c&eiB!*gy#VG)ZF_}@znaLpEms=a!lS2Y~K}@(2=#ECu?!Qp6(4HNG7}4Qh}+%VJ+k7Of;?DP|UtHi!w_xOTR0)Qh!STMKLdaQT_+c9~3=;$YR#^+0Uzw zrhf4sK4^REp5x>2=qE0DsSYaPBghkDdl=2}Ne5S4KxN!k6}dJEJ!W{8Bv?t1(S>Pi zgEW)yDCf@HtI3F(#JFpltL3Dlwbj1IH?jL2rq~{(eNq3ax^AI0GHi`FFLbA^ug`^! zzsN2F;~D!-zGutP5%bDmCPaoPOn_4+E|-4y$#>wyxE`AhsZ*e!WMQt7?^u8E%59@_ za|ryy5^h*^NBw+;xI&iBAZ%lcZ@<#cLIH!+0u#l`DOp~~q92@n=cZqRui;jCi!A&% zNa}EU4aT2g(3N&_0B*5uxVziz-Xul9DNEN`Q$2wRA=Z_}b=6-6v05fco0^V+BJICa zlC^95zni_%Uv3+W{a$`*cOZc*i3w&+)3HgD(v0Wwe{^+b2Xh#fwWZ{eldM@=erkv! zAZF!S-r!90i=R-91hPF#Rr7D7=X+79C9yb;Tdc}sFyXaf=O2i%i0Jk5K z3*vy^TJ*0*F*ybZhyuBZtBi8Oyp7Yk!M@Th7nj+)r+d{(K?T9iq7bC{hYE2rK;Spl zh)}7Pl>2$6sZ~(VHS0kdI7Vcizr4;^z;68Wa}*>MaMbP$DduZ-k}kSCM|!~2QWa9` zEEg}J(0$yVqpmTVB}mwm5Kb;BH*` Date: Fri, 14 Nov 2025 20:06:03 +0100 Subject: [PATCH 10/21] Delete `.configure` & `.configure-files/` --- .configure | 8 -------- .configure-files/gradle.properties.enc | Bin 3040 -> 0 bytes .gitignore | 5 ----- 3 files changed, 13 deletions(-) delete mode 100644 .configure delete mode 100644 .configure-files/gradle.properties.enc diff --git a/.configure b/.configure deleted file mode 100644 index 8084ad4f2157..000000000000 --- a/.configure +++ /dev/null @@ -1,8 +0,0 @@ -{ - "project_name": "woocommerce-android", - "branch": "trunk", - "pinned_hash": "811d08531b187cfd2400e99d27214bba8906425d", - "files_to_copy": [ - ], - "file_dependencies": [] -} \ No newline at end of file diff --git a/.configure-files/gradle.properties.enc b/.configure-files/gradle.properties.enc deleted file mode 100644 index 7f4065aa9a912711d907f2b04f98c75ff46ace96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3040 zcmV<63m^1fNufX|v&x$f4ceBwXhAaOMAq7!J^pOr;-ou@EPKRUZ_#$GWE+UO8plp( zhBZfWlP;oYYv3hm28%pmYx$v5!`lSMIOx|sng6=uC)X~fqXearVoH|&v=S7(`q+fb z!5F0q-2&wU0_L8Xv`t=&MZ_A5(`~(J2$hUbv0y8FF05lqZ*2jtcp|BNOnxzaN9uJ$ zO;{VO<*sUviFTLK5!6ibaPq~6)@tITPY{b9gX}ZC0TaiyPVRSh(-dkWoQxz+#i6|K zB^8d&xo_v%n_$2i>nvq{LA4u1O}%)Dzrm|9xCl1fL+fL9LXJGjjZ8S6;$2EGh~LgL zp2RIs4sn;Uze{V)^tgAN| zn@1PeCO^T%;U4oEQAZ69J~+;(8j50sw3^yxp(>T&j7b!}bBZ4o5|gjLt%MVAa`w^Z z7rq;sIINJF0wX~AY!sM=j#K_Xygz5}OFA@~NTjk13^=`zX}7Esc55DK|C3UA|c z=@bLMpQ88Zl`7NwPeiy#HH29>9gbE&gkkMugBz^^(99HHqfIgyOyXxY5z|`iva@H$oewrCVMvp0?NBWnlC|Q zE2%FP4qYtR(pTsb!V77XA1V(0r5TRRql#^UnSbOk_GlHl$~ooRi=<2Jup(*qj)4q& zQ}LKPWrABq!v<)cU24VJ3?2lgyuaNZd@Cu(GHtWsGg8i!`#|aKZ$fP1fQ+V&v-Mp5X`J9l+%hw>fis`gD9FPxNd zaZRZ4>Q8#BXgZRMWXm|QI4YF0`3}Gi;qRelYf$`;iW&h~wp02kD}raj*Yk?X(zWnS zBlBUZ$JZ)njky?Qu(z75_i^UCdG&^_0ps|%h3EVHJUB}QPE*-|Mh|o#KYI?psmC@V zraaJ641CA=lDiTsMp(x1p8g9rWor!|0(!%O3(KMR;Ukv@_j;m6VtD}QrsN1}-r;+kb68Y~Z zGk#<)9R0o*#g?MEI}}TRwYCh74SuayZM|7zq-R=a9$|>cyBS-7lYXx?b(n$7W`WhJN|n23fyZWH_94FUmr0g%^ceF}H=8EhfhVGt2}- zLhi*m7_uDR1y=_+*htoYfeG9tZdmKRg`8S%>wR11J`$2>!k+_S?8pH{xx z0I0)5%7Nn=tn!Ja51tw>pqZK!%Mw7`j=-m~ueWrgki`GjA;D1#&qrHR)df=rO11?k zCT5}=dB$X|N#O#h*j2S=zb2$_QeR8S2Q{9#N7HEenslQ7@XPeV7006*e=qzSORlfm zOA>7mdSj+X$#uf59%*TuHx&D$3hR!d)3YYmtF0_Ug}<#);FJ9}{3(Nl#*RI!Ai~1` zNI=X%tYOFB*;T3Kn+>7QK>Te;9({Ce!7HaZv!31<_UC-3dKgm}OeB2k)eHW;)0~CT zhfBxf#k*s)S5vR2$HJ18?YG3Wzl-6n0mw64yYdCphdv$vTQ678h_UAecTwPpAw?>{ ztz6dgcmS@)hc{L#j*w1b8W`iejhbkM$IQ@y!SVKsPMYmtR3N4f zo;46wVUXyMiMw@=ovo#t($!+pr0v885_?~#W-%t6WUk7{fsM2;o$rmfP3Z|S+XRs} z-m8yX0UUEp=&P>NGIiZ=v>C-g-E04jY1~zDGqR%xNasXFB3H{c~o{9 zrw%J2+Ckt1$~9|qaYg2M;f^x1Ty`kRQQ&Fu!Cq(8n>^(qKcup}@6PZ_Y;VawW~s2( zR5+T%mh8oLQ}v!b@iaP~rFpa|y>kwsnv3fig-Rayg);a|m&Ro%GM;#&?JJ54_mkJ% z$UQ}3nH+hKPez!!{WA|9LbzvDfTczjFhI8!X*@<)zA}F_un+6dl(Av6+ut31kR`{C?rmv}pbJ8KnaEi{>twJL!c$m^QI2a$N?8;k3JF4zw1gmEQkhTXQf<5(sov|U_~Er0>vK*D2?(7NRky-5QG`A7{< z6>xQn(WXQV+esz$iY~WvZheD3xC$KyfJ%6y7lz{ diff --git a/.gitignore b/.gitignore index b36f28e4695d..5b500d6f8360 100644 --- a/.gitignore +++ b/.gitignore @@ -93,11 +93,6 @@ default.profraw local-builds.gradle -# All secrets should be stored under .configure-files -# Everything without a .enc extension is ignored -.configure-files/* -!.configure-files/*.enc - # Kotlin .kotlin/ From 04681dbdf54a21136362ff0dd5bc2ed39294ec89 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Fri, 14 Nov 2025 20:18:23 +0100 Subject: [PATCH 11/21] Call `git-crypt unlock` in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace calls to `configure_apply` with calls to `.buildkite/git-crypt/unlock.sh` - Commit the prebuilt binary to use on our EC2 images on CI(1), alongside the Dockerfile that was used to create it(2) (1) In the future we'll probably pre-provision our custom Android AMI with it instead of shipping it inside each repo (2) In theory we could use `docker run --rm -v …` to run `git-crypt` from within the Docker container, instead of extracting the binary from the Docker image and committing that binary. But for this to work, that requires to not only map the repo's dir as volume in the container, but also map the repo mirror dir used during `git clone --reference` / listed in `.git/objects/info/alternates`; so that can get tricky in CI that uses that git mirrors mechanism. Besides, the binary is pretty small (200KB) and being able to run it directly without Docker is not only simpler but avoids pulling the docker image in the CI agent before we can run it. --- .buildkite/commands/diff-merged-manifest.sh | 4 +-- .buildkite/commands/gradle-cache-build.sh | 4 +-- .buildkite/commands/prototype-build.sh | 4 +-- .buildkite/commands/release-build.sh | 4 +-- .buildkite/commands/run-instrumented-tests.sh | 4 +-- .buildkite/commands/run-unit-tests.sh | 4 +-- .buildkite/git-crypt/Dockerfile | 34 ++++++++++++++++++ .buildkite/git-crypt/git-crypt.linux-x86_64 | Bin 0 -> 209912 bytes .buildkite/git-crypt/unlock.sh | 24 +++++++++++++ .../download-release-translations.yml | 3 ++ .../release-pipelines/finalize-release.yml | 3 ++ fastlane/Fastfile | 4 --- 12 files changed, 76 insertions(+), 16 deletions(-) create mode 100644 .buildkite/git-crypt/Dockerfile create mode 100755 .buildkite/git-crypt/git-crypt.linux-x86_64 create mode 100755 .buildkite/git-crypt/unlock.sh diff --git a/.buildkite/commands/diff-merged-manifest.sh b/.buildkite/commands/diff-merged-manifest.sh index 43d5582aebdf..ac610690f365 100755 --- a/.buildkite/commands/diff-merged-manifest.sh +++ b/.buildkite/commands/diff-merged-manifest.sh @@ -14,8 +14,8 @@ BUILD_VARIANT=$1 echo "--- :rubygems: Setting up Gems" install_gems -echo "--- :closed_lock_with_key: Installing Secrets" -bundle exec fastlane run configure_apply +echo "--- :closed_lock_with_key: Decrypting Secrets" +.buildkite/git-crypt/unlock.sh echo "--- 💾 Diff Merged Manifest (Module: WooCommerce, Build Variant: ${BUILD_VARIANT})" comment_with_manifest_diff "WooCommerce" ${BUILD_VARIANT} diff --git a/.buildkite/commands/gradle-cache-build.sh b/.buildkite/commands/gradle-cache-build.sh index 322de2857604..e10a13801fcf 100755 --- a/.buildkite/commands/gradle-cache-build.sh +++ b/.buildkite/commands/gradle-cache-build.sh @@ -13,8 +13,8 @@ fi echo "--- :rubygems: Setting up Gems" install_gems -echo "--- :closed_lock_with_key: Installing Secrets" -bundle exec fastlane run configure_apply +echo "--- :closed_lock_with_key: Decrypting Secrets" +.buildkite/git-crypt/unlock.sh echo "--- :hammer_and_wrench: Building" ./gradlew assembleWasabiDebug diff --git a/.buildkite/commands/prototype-build.sh b/.buildkite/commands/prototype-build.sh index c4054f8ba101..013effe472b4 100755 --- a/.buildkite/commands/prototype-build.sh +++ b/.buildkite/commands/prototype-build.sh @@ -12,8 +12,8 @@ APP_TO_BUILD="${1?You need to specify the app to build, WooCommerce or WooCommer echo "--- :rubygems: Setting up Gems" install_gems -echo "--- :closed_lock_with_key: Installing Secrets" -bundle exec fastlane run configure_apply +echo "--- :closed_lock_with_key: Decrypting Secrets" +.buildkite/git-crypt/unlock.sh echo "--- :hammer_and_wrench: Building ${APP_TO_BUILD}" bundle exec fastlane build_and_upload_prototype_build app:"${APP_TO_BUILD}" diff --git a/.buildkite/commands/release-build.sh b/.buildkite/commands/release-build.sh index dd79a8182573..6816bb500f2a 100755 --- a/.buildkite/commands/release-build.sh +++ b/.buildkite/commands/release-build.sh @@ -5,8 +5,8 @@ APP_TO_BUILD="${1?You need to specify the app to build, WooCommerce or WooCommer echo "--- :rubygems: Setting up Gems" install_gems -echo "--- :closed_lock_with_key: Installing Secrets" -bundle exec fastlane run configure_apply +echo "--- :closed_lock_with_key: Decrypting Secrets" +.buildkite/git-crypt/unlock.sh echo "--- :hammer_and_wrench: Building ${APP_TO_BUILD}" bundle exec fastlane build_and_upload_google_play app:"${APP_TO_BUILD}" diff --git a/.buildkite/commands/run-instrumented-tests.sh b/.buildkite/commands/run-instrumented-tests.sh index a4dbd8f51738..a9fb3711bb6a 100755 --- a/.buildkite/commands/run-instrumented-tests.sh +++ b/.buildkite/commands/run-instrumented-tests.sh @@ -11,8 +11,8 @@ fi echo "--- :rubygems: Setting up Gems" install_gems -echo "--- :closed_lock_with_key: Installing Secrets" -bundle exec fastlane run configure_apply +echo "--- :closed_lock_with_key: Decrypting Secrets" +.buildkite/git-crypt/unlock.sh echo "--- 🧪 Testing" set +e diff --git a/.buildkite/commands/run-unit-tests.sh b/.buildkite/commands/run-unit-tests.sh index e2e3fce5016a..6398d59d5fbb 100755 --- a/.buildkite/commands/run-unit-tests.sh +++ b/.buildkite/commands/run-unit-tests.sh @@ -11,8 +11,8 @@ fi echo "--- :rubygems: Setting up Gems" install_gems -echo "--- :closed_lock_with_key: Installing Secrets" -bundle exec fastlane run configure_apply +echo "--- :closed_lock_with_key: Decrypting Secrets" +.buildkite/git-crypt/unlock.sh echo "+++ 🧪 Testing" set +e diff --git a/.buildkite/git-crypt/Dockerfile b/.buildkite/git-crypt/Dockerfile new file mode 100644 index 000000000000..ee73cd966bdd --- /dev/null +++ b/.buildkite/git-crypt/Dockerfile @@ -0,0 +1,34 @@ +### Builder Layer + +FROM amazonlinux:latest AS builder + +ENV VERSION=0.8.0 + +RUN dnf install -y \ + make \ + gcc-c++ \ + openssl-devel \ + tar \ + gzip + +RUN curl -L https://github.com/AGWA/git-crypt/archive/$VERSION.tar.gz | tar -zxv + +RUN cd git-crypt-$VERSION \ + && make \ + && make install PREFIX=/usr/local + +### Final Layer + +FROM amazonlinux:latest +COPY --from=builder /usr/local/bin/git-crypt /usr/local/bin/git-crypt + +WORKDIR /repo +VOLUME /repo +ENTRYPOINT ["/usr/local/bin/git-crypt"] + +# To extract the binary and commit it into the repository, follow these steps: +# +# $ docker build --platform linux/amd64 -t git-crypt . +# $ CONTAINER_ID=$(docker create git-crypt) +# $ docker cp $CONTAINER_ID:/usr/local/bin/git-crypt ./git-crypt.linux-x86_64 +# $ docker rm $CONTAINER_ID diff --git a/.buildkite/git-crypt/git-crypt.linux-x86_64 b/.buildkite/git-crypt/git-crypt.linux-x86_64 new file mode 100755 index 0000000000000000000000000000000000000000..4ec7211f09ebfff45955c961aaf0587984752e02 GIT binary patch literal 209912 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 literal 0 HcmV?d00001 diff --git a/.buildkite/git-crypt/unlock.sh b/.buildkite/git-crypt/unlock.sh new file mode 100755 index 000000000000..5fd8a3a08ee3 --- /dev/null +++ b/.buildkite/git-crypt/unlock.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +if [ -z "$GIT_CRYPT_ENCRYPTION_KEY" ]; then + echo "GIT_CRYPT_ENCRYPTION_KEY is not set" + exit 1 +fi + +set -euo pipefail + +echo "Checking for git-crypt..." +if command -v git-crypt >/dev/null 2>&1; then + echo " - Using system git-crypt" + gitcrypt_path="git-crypt" +elif [ "$(uname -s)" == "Linux" ] && [ "$(uname -m)" == "x86_64" ]; then + echo " - Using pre-compiled x86_64 git-crypt" + gitcrypt_path=".buildkite/git-crypt/git-crypt.linux-x86_64" +else + echo "Unable to find git-crypt binary (architecture: $(uname -s) $(uname -m))" + exit 1 +fi + +echo "🔓 Decrypting repository..." +"${gitcrypt_path}" unlock <(echo "${GIT_CRYPT_ENCRYPTION_KEY}" | base64 -d) +echo "✅ git-crypt unlocked" diff --git a/.buildkite/release-pipelines/download-release-translations.yml b/.buildkite/release-pipelines/download-release-translations.yml index ad66488110b3..85ce4812b60a 100644 --- a/.buildkite/release-pipelines/download-release-translations.yml +++ b/.buildkite/release-pipelines/download-release-translations.yml @@ -13,6 +13,9 @@ steps: echo '--- :ruby: Setup Ruby Tools' install_gems + echo '--- :closed_lock_with_key: Decrypting Secrets' + .buildkite/git-crypt/unlock.sh + echo '--- :globe_with_meridians: Download Release Translations' bundle exec fastlane download_release_translations skip_confirm:true include_wear_app:"${INCLUDE_WEAR_APP:-false}" agents: diff --git a/.buildkite/release-pipelines/finalize-release.yml b/.buildkite/release-pipelines/finalize-release.yml index 65a9a4975cab..b83d51635180 100644 --- a/.buildkite/release-pipelines/finalize-release.yml +++ b/.buildkite/release-pipelines/finalize-release.yml @@ -13,6 +13,9 @@ steps: echo '--- :ruby: Setup Ruby Tools' install_gems + echo '--- :closed_lock_with_key: Decrypting Secrets' + .buildkite/git-crypt/unlock.sh + echo '--- :shipit: Finalize Release' bundle exec fastlane finalize_release skip_confirm:true include_wear_app:"${INCLUDE_WEAR_APP:-false}" agents: diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 8f34cb935ebd..2c76d52c2f55 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -476,8 +476,6 @@ platform :android do UI.important("Downloading latest translations for release: #{release_version_current}") UI.user_error!("Terminating as requested. Don't forget to run the remainder of this automation manually.") unless skip_confirm || UI.confirm('Do you want to continue?') - configure_apply(force: is_ci) - # Don't check translation coverage in CI check_translation_progress_all unless is_ci download_translations @@ -511,8 +509,6 @@ platform :android do UI.important("Finalizing release: #{release_version_current}") UI.user_error!("Terminating as requested. Don't forget to run the remainder of this automation manually.") unless skip_confirm || UI.confirm('Do you want to continue?') - configure_apply(force: is_ci) - # Bump the release version and build code UI.message 'Bumping final release version and build code...' VERSION_FILE.write_version( From cd7e8541e76f302f0c6adbe2a3ebe320fe2c46c6 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Sat, 15 Nov 2025 03:47:16 +0100 Subject: [PATCH 12/21] fix lint job vs `google-services.json-example` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Now that we migrated to `git-crypt`, the `WooCommerce/google-services.json` file _always_ exists in the repo (albeit encrypted if the repo was not git-crypt-unlocked after being cloned), the logic to decide when to copy the `google-services.json-example` file had to be adjusted - Also updated the `README.md` accordingly—to suggest external contributors to copy the example file --- README.md | 3 ++- WooCommerce/build.gradle | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 36885c399ee7..0a3c30c7c8a2 100644 --- a/README.md +++ b/README.md @@ -41,10 +41,11 @@ 1. If you are a developer at Automattic: 1. Make sure you have `git-crypt` installed (`brew install git-crypt`) 1. Search for "WooCommerce Android git-crypt encryption key" in our Secret Store, and copy the Base64 value in your clipboard - 1. Run `git-crypt unlock <(pbpaste | base64 -d)` to decrypt the encrypted files (including `secrets.properties`) + 1. Run `git-crypt unlock <(pbpaste | base64 -d)` to decrypt the encrypted files (including `secrets.properties` and `WooCommerce/google-services.json`) 1. If you are an external contributor: 1. Generate developer OAuth2 tokens. See the [OAuth2 Authentication](docs/project-overview.md#oauth2-authentication) section for details. 1. Edit `defaults.properties` and adjust the values as needed—especiallyincluding `wp.oauth.*` ones. See the [Configuration Files](docs/project-overview.md#configuration-files) section for a breakdown of the properties. + 1. `cp WooCommerce/google-services.json-example WooCommerce/google-services.json` (to replace that encrypted file with placeholder content) 1. In Android Studio, open the project from the local repository. This will auto-generate `local.properties` with the SDK location. 1. Optional: Go to Tools → Device Manager and create an emulated device. 1. Run. (Creates a default virtual device if you skipped the previous step) diff --git a/WooCommerce/build.gradle b/WooCommerce/build.gradle index f7277f17b337..2f9a5e493d03 100644 --- a/WooCommerce/build.gradle +++ b/WooCommerce/build.gradle @@ -498,12 +498,13 @@ android.buildTypes.all { buildType -> } // If Google services file doesn't exist, copy example file. - if (!file("google-services.json").exists()) { + def googleServicesFile = file("google-services.json") + if (!googleServicesFile.exists() || isFileEncrypted(googleServicesFile)) { tasks.copyGoogleServicesExampleFile.copy() } // Print warning message if example Google services file is used. - if ((file("google-services.json").text) == (file("google-services.json-example").text)) { + if ((googleServicesFile.text) == (file("google-services.json-example").text)) { println("WARNING: You're using the example google-services.json file. Google login will fail.") } } @@ -516,6 +517,13 @@ static def loadPropertiesFromFile(inputFile) { return properties } +static def isFileEncrypted(File file) { + def gitcryptHeader = [0x00, 0x47, 0x49, 0x54, 0x43, 0x52, 0x59, 0x50, 0x54] as byte[] // GITCRYPT header + def header = new byte[gitcryptHeader.length] + file.withInputStream { stream -> stream.read(header) } + return Arrays.equals(header, gitcryptHeader) +} + def isLeakCanaryEnabled() { return developerProperties.get("enable_leak_canary") ?: true } From 6ed308b895028df1a7e46bc518006466b4acc26c Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Sat, 15 Nov 2025 20:45:12 +0100 Subject: [PATCH 13/21] Use `git-crypt-unlock` helper from `ci-toolkit` --- .buildkite/commands/diff-merged-manifest.sh | 2 +- .buildkite/commands/gradle-cache-build.sh | 2 +- .buildkite/commands/prototype-build.sh | 2 +- .buildkite/commands/release-build.sh | 2 +- .buildkite/commands/run-instrumented-tests.sh | 2 +- .buildkite/commands/run-unit-tests.sh | 2 +- .buildkite/git-crypt/Dockerfile | 34 ------------------ .buildkite/git-crypt/git-crypt.linux-x86_64 | Bin 209912 -> 0 bytes .buildkite/git-crypt/unlock.sh | 24 ------------- .../download-release-translations.yml | 2 +- .../release-pipelines/finalize-release.yml | 2 +- .buildkite/shared-pipeline-vars | 2 +- 12 files changed, 9 insertions(+), 67 deletions(-) delete mode 100644 .buildkite/git-crypt/Dockerfile delete mode 100755 .buildkite/git-crypt/git-crypt.linux-x86_64 delete mode 100755 .buildkite/git-crypt/unlock.sh diff --git a/.buildkite/commands/diff-merged-manifest.sh b/.buildkite/commands/diff-merged-manifest.sh index ac610690f365..ac7c96ba4c21 100755 --- a/.buildkite/commands/diff-merged-manifest.sh +++ b/.buildkite/commands/diff-merged-manifest.sh @@ -15,7 +15,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -.buildkite/git-crypt/unlock.sh +git-crypt-unlock echo "--- 💾 Diff Merged Manifest (Module: WooCommerce, Build Variant: ${BUILD_VARIANT})" comment_with_manifest_diff "WooCommerce" ${BUILD_VARIANT} diff --git a/.buildkite/commands/gradle-cache-build.sh b/.buildkite/commands/gradle-cache-build.sh index e10a13801fcf..1a7d4fa45f85 100755 --- a/.buildkite/commands/gradle-cache-build.sh +++ b/.buildkite/commands/gradle-cache-build.sh @@ -14,7 +14,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -.buildkite/git-crypt/unlock.sh +git-crypt-unlock echo "--- :hammer_and_wrench: Building" ./gradlew assembleWasabiDebug diff --git a/.buildkite/commands/prototype-build.sh b/.buildkite/commands/prototype-build.sh index 013effe472b4..7a9e23e13d09 100755 --- a/.buildkite/commands/prototype-build.sh +++ b/.buildkite/commands/prototype-build.sh @@ -13,7 +13,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -.buildkite/git-crypt/unlock.sh +git-crypt-unlock echo "--- :hammer_and_wrench: Building ${APP_TO_BUILD}" bundle exec fastlane build_and_upload_prototype_build app:"${APP_TO_BUILD}" diff --git a/.buildkite/commands/release-build.sh b/.buildkite/commands/release-build.sh index 6816bb500f2a..1bb9e7414505 100755 --- a/.buildkite/commands/release-build.sh +++ b/.buildkite/commands/release-build.sh @@ -6,7 +6,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -.buildkite/git-crypt/unlock.sh +git-crypt-unlock echo "--- :hammer_and_wrench: Building ${APP_TO_BUILD}" bundle exec fastlane build_and_upload_google_play app:"${APP_TO_BUILD}" diff --git a/.buildkite/commands/run-instrumented-tests.sh b/.buildkite/commands/run-instrumented-tests.sh index a9fb3711bb6a..3035f79b9fe1 100755 --- a/.buildkite/commands/run-instrumented-tests.sh +++ b/.buildkite/commands/run-instrumented-tests.sh @@ -12,7 +12,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -.buildkite/git-crypt/unlock.sh +git-crypt-unlock echo "--- 🧪 Testing" set +e diff --git a/.buildkite/commands/run-unit-tests.sh b/.buildkite/commands/run-unit-tests.sh index 6398d59d5fbb..92acf3362876 100755 --- a/.buildkite/commands/run-unit-tests.sh +++ b/.buildkite/commands/run-unit-tests.sh @@ -12,7 +12,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -.buildkite/git-crypt/unlock.sh +git-crypt-unlock echo "+++ 🧪 Testing" set +e diff --git a/.buildkite/git-crypt/Dockerfile b/.buildkite/git-crypt/Dockerfile deleted file mode 100644 index ee73cd966bdd..000000000000 --- a/.buildkite/git-crypt/Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -### Builder Layer - -FROM amazonlinux:latest AS builder - -ENV VERSION=0.8.0 - -RUN dnf install -y \ - make \ - gcc-c++ \ - openssl-devel \ - tar \ - gzip - -RUN curl -L https://github.com/AGWA/git-crypt/archive/$VERSION.tar.gz | tar -zxv - -RUN cd git-crypt-$VERSION \ - && make \ - && make install PREFIX=/usr/local - -### Final Layer - -FROM amazonlinux:latest -COPY --from=builder /usr/local/bin/git-crypt /usr/local/bin/git-crypt - -WORKDIR /repo -VOLUME /repo -ENTRYPOINT ["/usr/local/bin/git-crypt"] - -# To extract the binary and commit it into the repository, follow these steps: -# -# $ docker build --platform linux/amd64 -t git-crypt . -# $ CONTAINER_ID=$(docker create git-crypt) -# $ docker cp $CONTAINER_ID:/usr/local/bin/git-crypt ./git-crypt.linux-x86_64 -# $ docker rm $CONTAINER_ID diff --git a/.buildkite/git-crypt/git-crypt.linux-x86_64 b/.buildkite/git-crypt/git-crypt.linux-x86_64 deleted file mode 100755 index 4ec7211f09ebfff45955c961aaf0587984752e02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209912 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 diff --git a/.buildkite/git-crypt/unlock.sh b/.buildkite/git-crypt/unlock.sh deleted file mode 100755 index 5fd8a3a08ee3..000000000000 --- a/.buildkite/git-crypt/unlock.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -if [ -z "$GIT_CRYPT_ENCRYPTION_KEY" ]; then - echo "GIT_CRYPT_ENCRYPTION_KEY is not set" - exit 1 -fi - -set -euo pipefail - -echo "Checking for git-crypt..." -if command -v git-crypt >/dev/null 2>&1; then - echo " - Using system git-crypt" - gitcrypt_path="git-crypt" -elif [ "$(uname -s)" == "Linux" ] && [ "$(uname -m)" == "x86_64" ]; then - echo " - Using pre-compiled x86_64 git-crypt" - gitcrypt_path=".buildkite/git-crypt/git-crypt.linux-x86_64" -else - echo "Unable to find git-crypt binary (architecture: $(uname -s) $(uname -m))" - exit 1 -fi - -echo "🔓 Decrypting repository..." -"${gitcrypt_path}" unlock <(echo "${GIT_CRYPT_ENCRYPTION_KEY}" | base64 -d) -echo "✅ git-crypt unlocked" diff --git a/.buildkite/release-pipelines/download-release-translations.yml b/.buildkite/release-pipelines/download-release-translations.yml index 85ce4812b60a..4887c832f8f5 100644 --- a/.buildkite/release-pipelines/download-release-translations.yml +++ b/.buildkite/release-pipelines/download-release-translations.yml @@ -14,7 +14,7 @@ steps: install_gems echo '--- :closed_lock_with_key: Decrypting Secrets' - .buildkite/git-crypt/unlock.sh + git-crypt-unlock echo '--- :globe_with_meridians: Download Release Translations' bundle exec fastlane download_release_translations skip_confirm:true include_wear_app:"${INCLUDE_WEAR_APP:-false}" diff --git a/.buildkite/release-pipelines/finalize-release.yml b/.buildkite/release-pipelines/finalize-release.yml index b83d51635180..6abbe9e6f542 100644 --- a/.buildkite/release-pipelines/finalize-release.yml +++ b/.buildkite/release-pipelines/finalize-release.yml @@ -14,7 +14,7 @@ steps: install_gems echo '--- :closed_lock_with_key: Decrypting Secrets' - .buildkite/git-crypt/unlock.sh + git-crypt-unlock echo '--- :shipit: Finalize Release' bundle exec fastlane finalize_release skip_confirm:true include_wear_app:"${INCLUDE_WEAR_APP:-false}" diff --git a/.buildkite/shared-pipeline-vars b/.buildkite/shared-pipeline-vars index 08d9e22a5a23..88f94e3a7b19 100644 --- a/.buildkite/shared-pipeline-vars +++ b/.buildkite/shared-pipeline-vars @@ -3,6 +3,6 @@ # This file is `source`'d before calling `buildkite-agent pipeline upload`, and can be used # to set up some variables that will be interpolated in the `.yml` pipeline before uploading it. -export CI_TOOLKIT="automattic/a8c-ci-toolkit#5.4.0" +export CI_TOOLKIT="automattic/a8c-ci-toolkit#git-crypt-unlock" export TEST_COLLECTOR="test-collector#v1.10.1" export CLAUDE_PLUGIN="claude-summarize#v1.1.0" From 51542b1b3414c1430516e3b44d285a785d531374 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Sun, 16 Nov 2025 00:30:38 +0100 Subject: [PATCH 14/21] Point to latest ci-toolkit commit for `git-crypt` helper --- .buildkite/commands/diff-merged-manifest.sh | 2 +- .buildkite/commands/git-crypt-unlock.sh | 5 +++++ .buildkite/commands/gradle-cache-build.sh | 2 +- .buildkite/commands/prototype-build.sh | 2 +- .buildkite/commands/release-build.sh | 2 +- .buildkite/commands/run-instrumented-tests.sh | 2 +- .buildkite/commands/run-unit-tests.sh | 2 +- .../release-pipelines/download-release-translations.yml | 2 +- .buildkite/release-pipelines/finalize-release.yml | 2 +- .buildkite/shared-pipeline-vars | 3 ++- 10 files changed, 15 insertions(+), 9 deletions(-) create mode 100755 .buildkite/commands/git-crypt-unlock.sh diff --git a/.buildkite/commands/diff-merged-manifest.sh b/.buildkite/commands/diff-merged-manifest.sh index ac7c96ba4c21..b2ea460f9cf6 100755 --- a/.buildkite/commands/diff-merged-manifest.sh +++ b/.buildkite/commands/diff-merged-manifest.sh @@ -15,7 +15,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -git-crypt-unlock +.buildkite/commands/git-crypt-unlock.sh echo "--- 💾 Diff Merged Manifest (Module: WooCommerce, Build Variant: ${BUILD_VARIANT})" comment_with_manifest_diff "WooCommerce" ${BUILD_VARIANT} diff --git a/.buildkite/commands/git-crypt-unlock.sh b/.buildkite/commands/git-crypt-unlock.sh new file mode 100755 index 000000000000..2e9d27616706 --- /dev/null +++ b/.buildkite/commands/git-crypt-unlock.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -euo pipefail + +echo "$GIT_CRYPT_ENCRYPTION_KEY" | base64 -d | git-crypt unlock - diff --git a/.buildkite/commands/gradle-cache-build.sh b/.buildkite/commands/gradle-cache-build.sh index 1a7d4fa45f85..3a1582393ac3 100755 --- a/.buildkite/commands/gradle-cache-build.sh +++ b/.buildkite/commands/gradle-cache-build.sh @@ -14,7 +14,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -git-crypt-unlock +.buildkite/commands/git-crypt-unlock.sh echo "--- :hammer_and_wrench: Building" ./gradlew assembleWasabiDebug diff --git a/.buildkite/commands/prototype-build.sh b/.buildkite/commands/prototype-build.sh index 7a9e23e13d09..a6afd0990853 100755 --- a/.buildkite/commands/prototype-build.sh +++ b/.buildkite/commands/prototype-build.sh @@ -13,7 +13,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -git-crypt-unlock +.buildkite/commands/git-crypt-unlock.sh echo "--- :hammer_and_wrench: Building ${APP_TO_BUILD}" bundle exec fastlane build_and_upload_prototype_build app:"${APP_TO_BUILD}" diff --git a/.buildkite/commands/release-build.sh b/.buildkite/commands/release-build.sh index 1bb9e7414505..70f5f7e37d42 100755 --- a/.buildkite/commands/release-build.sh +++ b/.buildkite/commands/release-build.sh @@ -6,7 +6,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -git-crypt-unlock +.buildkite/commands/git-crypt-unlock.sh echo "--- :hammer_and_wrench: Building ${APP_TO_BUILD}" bundle exec fastlane build_and_upload_google_play app:"${APP_TO_BUILD}" diff --git a/.buildkite/commands/run-instrumented-tests.sh b/.buildkite/commands/run-instrumented-tests.sh index 3035f79b9fe1..359f68f6f120 100755 --- a/.buildkite/commands/run-instrumented-tests.sh +++ b/.buildkite/commands/run-instrumented-tests.sh @@ -12,7 +12,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -git-crypt-unlock +.buildkite/commands/git-crypt-unlock.sh echo "--- 🧪 Testing" set +e diff --git a/.buildkite/commands/run-unit-tests.sh b/.buildkite/commands/run-unit-tests.sh index 92acf3362876..4aac5f1504df 100755 --- a/.buildkite/commands/run-unit-tests.sh +++ b/.buildkite/commands/run-unit-tests.sh @@ -12,7 +12,7 @@ echo "--- :rubygems: Setting up Gems" install_gems echo "--- :closed_lock_with_key: Decrypting Secrets" -git-crypt-unlock +.buildkite/commands/git-crypt-unlock.sh echo "+++ 🧪 Testing" set +e diff --git a/.buildkite/release-pipelines/download-release-translations.yml b/.buildkite/release-pipelines/download-release-translations.yml index 4887c832f8f5..35871f14e2a6 100644 --- a/.buildkite/release-pipelines/download-release-translations.yml +++ b/.buildkite/release-pipelines/download-release-translations.yml @@ -14,7 +14,7 @@ steps: install_gems echo '--- :closed_lock_with_key: Decrypting Secrets' - git-crypt-unlock + .buildkite/commands/git-crypt-unlock.sh echo '--- :globe_with_meridians: Download Release Translations' bundle exec fastlane download_release_translations skip_confirm:true include_wear_app:"${INCLUDE_WEAR_APP:-false}" diff --git a/.buildkite/release-pipelines/finalize-release.yml b/.buildkite/release-pipelines/finalize-release.yml index 6abbe9e6f542..ec1f180f4097 100644 --- a/.buildkite/release-pipelines/finalize-release.yml +++ b/.buildkite/release-pipelines/finalize-release.yml @@ -14,7 +14,7 @@ steps: install_gems echo '--- :closed_lock_with_key: Decrypting Secrets' - git-crypt-unlock + .buildkite/commands/git-crypt-unlock.sh echo '--- :shipit: Finalize Release' bundle exec fastlane finalize_release skip_confirm:true include_wear_app:"${INCLUDE_WEAR_APP:-false}" diff --git a/.buildkite/shared-pipeline-vars b/.buildkite/shared-pipeline-vars index 88f94e3a7b19..27bb9df13a48 100644 --- a/.buildkite/shared-pipeline-vars +++ b/.buildkite/shared-pipeline-vars @@ -3,6 +3,7 @@ # This file is `source`'d before calling `buildkite-agent pipeline upload`, and can be used # to set up some variables that will be interpolated in the `.yml` pipeline before uploading it. -export CI_TOOLKIT="automattic/a8c-ci-toolkit#git-crypt-unlock" +# "git-crypt-unlock" branch / https://github.com/Automattic/a8c-ci-toolkit-buildkite-plugin/pull/195 +export CI_TOOLKIT="automattic/a8c-ci-toolkit#e79b4e5cba54576e4dd2a4941714e9dd2f7c687c" export TEST_COLLECTOR="test-collector#v1.10.1" export CLAUDE_PLUGIN="claude-summarize#v1.1.0" From 3c35f483612a43605f87a33fd95bc24836a1c07a Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Sun, 16 Nov 2025 01:08:08 +0100 Subject: [PATCH 15/21] Keep repo locked during `diff-merged-manifest` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since that command switched branches, we don't want it to fail or to encounter a case of modified files if the `.gitattributes` changed between the 2 branches and some git-crypt'ed files end up being marked as modified during the switch because of it. I an hoping that we shouldn't really require access to any secret when computing manifest diff (even if that involves calling a `./gradlew process{variant}Manifest` task)… let's test --- .buildkite/commands/diff-merged-manifest.sh | 3 --- .buildkite/shared-pipeline-vars | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.buildkite/commands/diff-merged-manifest.sh b/.buildkite/commands/diff-merged-manifest.sh index b2ea460f9cf6..d7bda1234d67 100755 --- a/.buildkite/commands/diff-merged-manifest.sh +++ b/.buildkite/commands/diff-merged-manifest.sh @@ -14,9 +14,6 @@ BUILD_VARIANT=$1 echo "--- :rubygems: Setting up Gems" install_gems -echo "--- :closed_lock_with_key: Decrypting Secrets" -.buildkite/commands/git-crypt-unlock.sh - echo "--- 💾 Diff Merged Manifest (Module: WooCommerce, Build Variant: ${BUILD_VARIANT})" comment_with_manifest_diff "WooCommerce" ${BUILD_VARIANT} diff --git a/.buildkite/shared-pipeline-vars b/.buildkite/shared-pipeline-vars index 27bb9df13a48..cf41135f8150 100644 --- a/.buildkite/shared-pipeline-vars +++ b/.buildkite/shared-pipeline-vars @@ -4,6 +4,6 @@ # to set up some variables that will be interpolated in the `.yml` pipeline before uploading it. # "git-crypt-unlock" branch / https://github.com/Automattic/a8c-ci-toolkit-buildkite-plugin/pull/195 -export CI_TOOLKIT="automattic/a8c-ci-toolkit#e79b4e5cba54576e4dd2a4941714e9dd2f7c687c" +export CI_TOOLKIT="automattic/a8c-ci-toolkit#0a3f10921096cee57c18ac5667fc64c1aaad4a7d" export TEST_COLLECTOR="test-collector#v1.10.1" export CLAUDE_PLUGIN="claude-summarize#v1.1.0" From fc3ab3309259609909730f7e98aabb501322960f Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Sun, 16 Nov 2025 02:33:44 +0100 Subject: [PATCH 16/21] Update unlock instructions in MD docs --- README.md | 2 +- docs/project-overview.md | 2 +- fastlane/Fastfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0a3c30c7c8a2..9f7834521a35 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ 1. If you are a developer at Automattic: 1. Make sure you have `git-crypt` installed (`brew install git-crypt`) 1. Search for "WooCommerce Android git-crypt encryption key" in our Secret Store, and copy the Base64 value in your clipboard - 1. Run `git-crypt unlock <(pbpaste | base64 -d)` to decrypt the encrypted files (including `secrets.properties` and `WooCommerce/google-services.json`) + 1. Run `pbpaste | base64 -d | git-crypt unlock -` to decrypt the encrypted files (including `secrets.properties` and `WooCommerce/google-services.json`) 1. If you are an external contributor: 1. Generate developer OAuth2 tokens. See the [OAuth2 Authentication](docs/project-overview.md#oauth2-authentication) section for details. 1. Edit `defaults.properties` and adjust the values as needed—especiallyincluding `wp.oauth.*` ones. See the [Configuration Files](docs/project-overview.md#configuration-files) section for a breakdown of the properties. diff --git a/docs/project-overview.md b/docs/project-overview.md index ab89e1955806..050d26125ed4 100644 --- a/docs/project-overview.md +++ b/docs/project-overview.md @@ -38,7 +38,7 @@ This file is encrypted (using `git-crypt`), and only developers working at Autom If you are a developer working at Automattic, ensure you followed those instructions once after cloning the repo: 1. Make sure you have `git-crypt` installed (`brew install git-crypt`) 1. Search for "WooCommerce Android git-crypt encryption key" in our Secret Store, and copy the Base64 value in your clipboard - 1. Run `git-crypt unlock <(pbpaste | base64 -d)` to decrypt the encrypted files (including `secrets.properties`) + 1. Run `pbpaste | base64 -d | git-crypt unlock -` to decrypt the encrypted files (including `secrets.properties`) If you are an external contributor, provide those variables in your `defaults.properties` instead: diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 2c76d52c2f55..1bc7845bddbe 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -1484,7 +1484,7 @@ platform :android do begin key_file_secrets = JSON.parse(File.read(GOOGLE_FIREBASE_SECRETS_PATH)) rescue StandardError - UI.user_error!('Unable to read Firebase Secrets File – did you run `git-crypt unlock <(echo "…encryption-key…" | base64 -d)` on the repo?') + UI.user_error!('Unable to read Firebase Secrets File – did you run `echo "…encryption-key…" | base64 -d | git-crypt unlock -` on the repo?') end UI.user_error!("Unable to find key `#{name}` in #{GOOGLE_FIREBASE_SECRETS_PATH}") if key_file_secrets[name].nil? key_file_secrets[name] From 67f9404758eb668a551054a590beb48806f0fc0b Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Mon, 24 Nov 2025 19:31:48 +0100 Subject: [PATCH 17/21] Update README.md Co-authored-by: Ian G. Maia --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f7834521a35..2aa565baebee 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ 1. Run `pbpaste | base64 -d | git-crypt unlock -` to decrypt the encrypted files (including `secrets.properties` and `WooCommerce/google-services.json`) 1. If you are an external contributor: 1. Generate developer OAuth2 tokens. See the [OAuth2 Authentication](docs/project-overview.md#oauth2-authentication) section for details. - 1. Edit `defaults.properties` and adjust the values as needed—especiallyincluding `wp.oauth.*` ones. See the [Configuration Files](docs/project-overview.md#configuration-files) section for a breakdown of the properties. + 1. Edit `defaults.properties` and adjust the values as needed — especially including `wp.oauth.*` ones. See the [Configuration Files](docs/project-overview.md#configuration-files) section for a breakdown of the properties. 1. `cp WooCommerce/google-services.json-example WooCommerce/google-services.json` (to replace that encrypted file with placeholder content) 1. In Android Studio, open the project from the local repository. This will auto-generate `local.properties` with the SDK location. 1. Optional: Go to Tools → Device Manager and create an emulated device. From e5bb8b6d068e5671dae1d490dae43a8fedef04e4 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Mon, 24 Nov 2025 19:30:23 +0100 Subject: [PATCH 18/21] Re-add `.configure-files` to `.gitignore` To cover the legacy case of someone switching to an old branch that didn't have `git-crypt` yet, running `configure_apply` on that old branch, then switching back to a branch that used `git-crypt`. In that case there's a risk that some files in `.configure-files` that would contain decrypted secrets would still be around (if the used didn't run `git clean`) and be accidentally commited to the remote. --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 5b500d6f8360..f29815cbe254 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,11 @@ local.properties # Backup Files *.bak +# Legacy secret files managed by `configure`, before we migrated to use `git-crypt`. +# Kept in this `.gitignore` to ensure that, if someone still had them in their local working copy and didn't do a +# `git clean` to remove them after the migration away from `configure`, they don't risk being accidentally committed. +.configure-files/ + # Android Studio Navigation editor temp files .navigation/ From 6816a2ac7208a74e354890ceac5fb8312d04f4a8 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Mon, 24 Nov 2025 19:33:53 +0100 Subject: [PATCH 19/21] Remove unnecessary step in README for external contributors The `google-services.json-example` file is automatically copied by `WooCommerce/build.gradle` if the `google-service.json` file is detected as being encrypted. So the instructions I initially added to suggest to copy the file manually are not relevant and not needed after all. h/t @wzieba https://github.com/woocommerce/woocommerce-android/pull/14979#discussion_r2533725810 --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 2aa565baebee..2ce799195c60 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,6 @@ 1. If you are an external contributor: 1. Generate developer OAuth2 tokens. See the [OAuth2 Authentication](docs/project-overview.md#oauth2-authentication) section for details. 1. Edit `defaults.properties` and adjust the values as needed — especially including `wp.oauth.*` ones. See the [Configuration Files](docs/project-overview.md#configuration-files) section for a breakdown of the properties. - 1. `cp WooCommerce/google-services.json-example WooCommerce/google-services.json` (to replace that encrypted file with placeholder content) 1. In Android Studio, open the project from the local repository. This will auto-generate `local.properties` with the SDK location. 1. Optional: Go to Tools → Device Manager and create an emulated device. 1. Run. (Creates a default virtual device if you skipped the previous step) From b6ecd9c2e8a65c54a1510df1d0fc5e12b6095392 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Mon, 24 Nov 2025 19:36:04 +0100 Subject: [PATCH 20/21] Provide direct link to internal secret store for a12s See https://github.com/woocommerce/woocommerce-android/pull/14979#discussion_r2533782837 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ce799195c60..263762669b0c 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ 1. If you are a developer at Automattic: 1. Make sure you have `git-crypt` installed (`brew install git-crypt`) - 1. Search for "WooCommerce Android git-crypt encryption key" in our Secret Store, and copy the Base64 value in your clipboard + 1. Open [the "WooCommerce Android git-crypt encryption key" entry in our Secret Store](https://mc.a8c.com/secret-store/?secret_id=13697), and copy the Base64 value in your clipboard 1. Run `pbpaste | base64 -d | git-crypt unlock -` to decrypt the encrypted files (including `secrets.properties` and `WooCommerce/google-services.json`) 1. If you are an external contributor: 1. Generate developer OAuth2 tokens. See the [OAuth2 Authentication](docs/project-overview.md#oauth2-authentication) section for details. From 66fa753ae3b791dfdf54fa2510e28afce613d459 Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Mon, 24 Nov 2025 19:52:52 +0100 Subject: [PATCH 21/21] `git-crypt unlock` before `install_gems` on CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit So that we decrypt things as early as possible in the CI jobs, now that `git-crypt` doesn't need Ruby to be installed first like `configure_apply` did. h/t @iangmaia — https://github.com/woocommerce/woocommerce-android/pull/14979#discussion_r2542666900 --- .buildkite/commands/gradle-cache-build.sh | 6 +++--- .buildkite/commands/prototype-build.sh | 6 +++--- .buildkite/commands/release-build.sh | 6 +++--- .buildkite/commands/run-instrumented-tests.sh | 6 +++--- .buildkite/commands/run-unit-tests.sh | 6 +++--- .../release-pipelines/download-release-translations.yml | 6 +++--- .buildkite/release-pipelines/finalize-release.yml | 6 +++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.buildkite/commands/gradle-cache-build.sh b/.buildkite/commands/gradle-cache-build.sh index 3a1582393ac3..9dfef29225a8 100755 --- a/.buildkite/commands/gradle-cache-build.sh +++ b/.buildkite/commands/gradle-cache-build.sh @@ -10,11 +10,11 @@ fi "$(dirname "${BASH_SOURCE[0]}")/restore-cache.sh" -echo "--- :rubygems: Setting up Gems" -install_gems - echo "--- :closed_lock_with_key: Decrypting Secrets" .buildkite/commands/git-crypt-unlock.sh +echo "--- :rubygems: Setting up Gems" +install_gems + echo "--- :hammer_and_wrench: Building" ./gradlew assembleWasabiDebug diff --git a/.buildkite/commands/prototype-build.sh b/.buildkite/commands/prototype-build.sh index a6afd0990853..17d1516753da 100755 --- a/.buildkite/commands/prototype-build.sh +++ b/.buildkite/commands/prototype-build.sh @@ -9,11 +9,11 @@ fi APP_TO_BUILD="${1?You need to specify the app to build, WooCommerce or WooCommerce-Wear}" -echo "--- :rubygems: Setting up Gems" -install_gems - echo "--- :closed_lock_with_key: Decrypting Secrets" .buildkite/commands/git-crypt-unlock.sh +echo "--- :rubygems: Setting up Gems" +install_gems + echo "--- :hammer_and_wrench: Building ${APP_TO_BUILD}" bundle exec fastlane build_and_upload_prototype_build app:"${APP_TO_BUILD}" diff --git a/.buildkite/commands/release-build.sh b/.buildkite/commands/release-build.sh index 70f5f7e37d42..dddb381cf532 100755 --- a/.buildkite/commands/release-build.sh +++ b/.buildkite/commands/release-build.sh @@ -2,11 +2,11 @@ APP_TO_BUILD="${1?You need to specify the app to build, WooCommerce or WooCommerce-Wear}" -echo "--- :rubygems: Setting up Gems" -install_gems - echo "--- :closed_lock_with_key: Decrypting Secrets" .buildkite/commands/git-crypt-unlock.sh +echo "--- :rubygems: Setting up Gems" +install_gems + echo "--- :hammer_and_wrench: Building ${APP_TO_BUILD}" bundle exec fastlane build_and_upload_google_play app:"${APP_TO_BUILD}" diff --git a/.buildkite/commands/run-instrumented-tests.sh b/.buildkite/commands/run-instrumented-tests.sh index 359f68f6f120..b028e93c84ce 100755 --- a/.buildkite/commands/run-instrumented-tests.sh +++ b/.buildkite/commands/run-instrumented-tests.sh @@ -8,12 +8,12 @@ fi "$(dirname "${BASH_SOURCE[0]}")/restore-cache.sh" -echo "--- :rubygems: Setting up Gems" -install_gems - echo "--- :closed_lock_with_key: Decrypting Secrets" .buildkite/commands/git-crypt-unlock.sh +echo "--- :rubygems: Setting up Gems" +install_gems + echo "--- 🧪 Testing" set +e bundle exec fastlane build_and_instrumented_test diff --git a/.buildkite/commands/run-unit-tests.sh b/.buildkite/commands/run-unit-tests.sh index 4aac5f1504df..8beffebfcc01 100755 --- a/.buildkite/commands/run-unit-tests.sh +++ b/.buildkite/commands/run-unit-tests.sh @@ -8,12 +8,12 @@ fi "$(dirname "${BASH_SOURCE[0]}")/restore-cache.sh" -echo "--- :rubygems: Setting up Gems" -install_gems - echo "--- :closed_lock_with_key: Decrypting Secrets" .buildkite/commands/git-crypt-unlock.sh +echo "--- :rubygems: Setting up Gems" +install_gems + echo "+++ 🧪 Testing" set +e ./gradlew testJalapenoDebugUnitTest testDebugUnitTest jacocoTestReport diff --git a/.buildkite/release-pipelines/download-release-translations.yml b/.buildkite/release-pipelines/download-release-translations.yml index 35871f14e2a6..c7442c2b518b 100644 --- a/.buildkite/release-pipelines/download-release-translations.yml +++ b/.buildkite/release-pipelines/download-release-translations.yml @@ -10,12 +10,12 @@ steps: .buildkite/commands/checkout-release-branch.sh "$RELEASE_VERSION" - echo '--- :ruby: Setup Ruby Tools' - install_gems - echo '--- :closed_lock_with_key: Decrypting Secrets' .buildkite/commands/git-crypt-unlock.sh + echo '--- :ruby: Setup Ruby Tools' + install_gems + echo '--- :globe_with_meridians: Download Release Translations' bundle exec fastlane download_release_translations skip_confirm:true include_wear_app:"${INCLUDE_WEAR_APP:-false}" agents: diff --git a/.buildkite/release-pipelines/finalize-release.yml b/.buildkite/release-pipelines/finalize-release.yml index ec1f180f4097..78c27ee18ee4 100644 --- a/.buildkite/release-pipelines/finalize-release.yml +++ b/.buildkite/release-pipelines/finalize-release.yml @@ -10,12 +10,12 @@ steps: .buildkite/commands/checkout-release-branch.sh "$RELEASE_VERSION" - echo '--- :ruby: Setup Ruby Tools' - install_gems - echo '--- :closed_lock_with_key: Decrypting Secrets' .buildkite/commands/git-crypt-unlock.sh + echo '--- :ruby: Setup Ruby Tools' + install_gems + echo '--- :shipit: Finalize Release' bundle exec fastlane finalize_release skip_confirm:true include_wear_app:"${INCLUDE_WEAR_APP:-false}" agents: