Skip to content

Commit 3971893

Browse files
authored
Merge branch 'main' into PM-27628-conditional-send-export
2 parents 940beb5 + 089caf5 commit 3971893

File tree

301 files changed

+13493
-3732
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

301 files changed

+13493
-3732
lines changed

.github/workflows/build-browser.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ jobs:
341341

342342
build-safari:
343343
name: Build Safari - ${{ matrix.license_type.readable }}
344-
runs-on: macos-13
344+
runs-on: macos-15
345345
permissions:
346346
contents: read
347347
id-token: write

.github/workflows/build-cli.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ jobs:
9393
[
9494
{ base: "linux", distro: "ubuntu-22.04", target_suffix: "" },
9595
{ base: "linux", distro: "ubuntu-22.04-arm", target_suffix: "-arm64" },
96-
{ base: "mac", distro: "macos-13", target_suffix: "" },
97-
{ base: "mac", distro: "macos-14", target_suffix: "-arm64" }
96+
{ base: "mac", distro: "macos-15-intel", target_suffix: "" },
97+
{ base: "mac", distro: "macos-15", target_suffix: "-arm64" }
9898
]
9999
license_type:
100100
[

.github/workflows/build-desktop.yml

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,7 @@ jobs:
725725
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
726726
with:
727727
ref: ${{ github.event.pull_request.head.sha }}
728+
persist-credentials: false
728729

729730
- name: Set up Node
730731
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
@@ -826,22 +827,22 @@ jobs:
826827
- name: Rename appx files for store
827828
if: ${{ needs.setup.outputs.has_secrets == 'true' }}
828829
run: |
829-
Copy-Item "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32.appx" `
830-
-Destination "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32-store.appx"
831-
Copy-Item "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64.appx" `
832-
-Destination "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64-store.appx"
833-
Copy-Item "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64.appx" `
834-
-Destination "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64-store.appx"
830+
Copy-Item "./dist/Bitwarden-Beta-$env:_PACKAGE_VERSION-ia32.appx" `
831+
-Destination "./dist/Bitwarden-Beta-$env:_PACKAGE_VERSION-ia32-store.appx"
832+
Copy-Item "./dist/Bitwarden-Beta-$env:_PACKAGE_VERSION-x64.appx" `
833+
-Destination "./dist/Bitwarden-Beta-$env:_PACKAGE_VERSION-x64-store.appx"
834+
Copy-Item "./dist/Bitwarden-Beta-$env:_PACKAGE_VERSION-arm64.appx" `
835+
-Destination "./dist/Bitwarden-Beta-$env:_PACKAGE_VERSION-arm64-store.appx"
835836
836837
- name: Fix NSIS artifact names for auto-updater
837838
if: ${{ needs.setup.outputs.has_secrets == 'true' }}
838839
run: |
839-
Rename-Item -Path .\dist\nsis-web\Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z `
840-
-NewName bitwarden-beta-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z
841-
Rename-Item -Path .\dist\nsis-web\Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64.nsis.7z `
842-
-NewName bitwarden-beta-${{ env._PACKAGE_VERSION }}-x64.nsis.7z
843-
Rename-Item -Path .\dist\nsis-web\Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z `
844-
-NewName bitwarden-beta-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z
840+
Rename-Item -Path .\dist\nsis-web\Bitwarden-Beta-$env:_PACKAGE_VERSION-ia32.nsis.7z `
841+
-NewName bitwarden-beta-$env:_PACKAGE_VERSION-ia32.nsis.7z
842+
Rename-Item -Path .\dist\nsis-web\Bitwarden-Beta-$env:_PACKAGE_VERSION-x64.nsis.7z `
843+
-NewName bitwarden-beta-$env:_PACKAGE_VERSION-x64.nsis.7z
844+
Rename-Item -Path .\dist\nsis-web\Bitwarden-Beta-$env:_PACKAGE_VERSION-arm64.nsis.7z `
845+
-NewName bitwarden-beta-$env:_PACKAGE_VERSION-arm64.nsis.7z
845846
846847
- name: Upload portable exe artifact
847848
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
@@ -940,7 +941,7 @@ jobs:
940941

941942
macos-build:
942943
name: MacOS Build
943-
runs-on: macos-13
944+
runs-on: macos-15
944945
needs:
945946
- setup
946947
permissions:
@@ -966,7 +967,12 @@ jobs:
966967
cache: 'npm'
967968
cache-dependency-path: '**/package-lock.json'
968969
node-version: ${{ env._NODE_VERSION }}
969-
970+
971+
- name: Set up Python
972+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
973+
with:
974+
python-version: '3.12'
975+
970976
- name: Set up Node-gyp
971977
run: python3 -m pip install setuptools
972978

@@ -1162,7 +1168,7 @@ jobs:
11621168

11631169
macos-package-github:
11641170
name: MacOS Package GitHub Release Assets
1165-
runs-on: macos-13
1171+
runs-on: macos-15
11661172
if: ${{ needs.setup.outputs.has_secrets == 'true' }}
11671173
needs:
11681174
- browser-build
@@ -1191,7 +1197,12 @@ jobs:
11911197
cache: 'npm'
11921198
cache-dependency-path: '**/package-lock.json'
11931199
node-version: ${{ env._NODE_VERSION }}
1194-
1200+
1201+
- name: Set up Python
1202+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
1203+
with:
1204+
python-version: '3.12'
1205+
11951206
- name: Set up Node-gyp
11961207
run: python3 -m pip install setuptools
11971208

@@ -1422,7 +1433,7 @@ jobs:
14221433

14231434
macos-package-mas:
14241435
name: MacOS Package Prod Release Asset
1425-
runs-on: macos-13
1436+
runs-on: macos-15
14261437
if: ${{ needs.setup.outputs.has_secrets == 'true' }}
14271438
needs:
14281439
- browser-build
@@ -1451,7 +1462,12 @@ jobs:
14511462
cache: 'npm'
14521463
cache-dependency-path: '**/package-lock.json'
14531464
node-version: ${{ env._NODE_VERSION }}
1454-
1465+
1466+
- name: Set up Python
1467+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
1468+
with:
1469+
python-version: '3.12'
1470+
14551471
- name: Set up Node-gyp
14561472
run: python3 -m pip install setuptools
14571473

.github/workflows/deploy-web.yml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ on:
5454
type: string
5555
required: false
5656

57-
permissions:
58-
deployments: write
57+
permissions: {}
5958

6059
jobs:
6160
setup:
@@ -373,10 +372,16 @@ jobs:
373372

374373
- name: Login to Azure
375374
uses: bitwarden/gh-actions/azure-login@main
375+
env:
376+
# The following 2 values are ignored in Zizmor, because they have to be dynamically mapped from secrets
377+
# The only way around this is to create separate steps per environment with static secret references, which is not maintainable
378+
SUBSCRIPTION_ID: ${{ secrets[ needs.setup.outputs.azure_login_subscription_id_key_name ] }} # zizmor: ignore[overprovisioned-secrets]
379+
CLIENT_ID: ${{ secrets[ needs.setup.outputs.azure_login_client_key_name ] }} # zizmor: ignore[overprovisioned-secrets]
380+
TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
376381
with:
377-
subscription_id: ${{ secrets[needs.setup.outputs.azure_login_subscription_id_key_name] }}
378-
tenant_id: ${{ secrets.AZURE_TENANT_ID }}
379-
client_id: ${{ secrets[needs.setup.outputs.azure_login_client_key_name] }}
382+
subscription_id: ${{ env.SUBSCRIPTION_ID }}
383+
tenant_id: ${{ env.TENANT_ID }}
384+
client_id: ${{ env.CLIENT_ID }}
380385

381386
- name: Retrieve Storage Account name
382387
id: retrieve-secrets-azcopy

.github/workflows/sdk-breaking-change-check.yml

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,26 @@
11
# This workflow runs TypeScript compatibility checks when the SDK is updated.
2-
# Triggered automatically by the SDK repository via repository_dispatch when SDK PRs are created/updated.
2+
# Triggered automatically by the SDK repository via workflow_dispatch when SDK PRs are created/updated.
33
name: SDK Breaking Change Check
4-
run-name: "SDK breaking change check (${{ github.event.client_payload.sdk_version }})"
4+
run-name: "SDK breaking change check (${{ github.event.inputs.sdk_version }})"
55
on:
6-
repository_dispatch:
7-
types: [sdk-breaking-change-check]
6+
workflow_dispatch:
7+
inputs:
8+
sdk_version:
9+
description: "SDK version being tested"
10+
required: true
11+
type: string
12+
source_repo:
13+
description: "Source repository"
14+
required: true
15+
type: string
16+
artifacts_run_id:
17+
description: "Artifacts run ID"
18+
required: true
19+
type: string
20+
artifact_name:
21+
description: "Artifact name"
22+
required: true
23+
type: string
824

925
permissions:
1026
contents: read
@@ -17,12 +33,11 @@ jobs:
1733
runs-on: ubuntu-24.04
1834
timeout-minutes: 15
1935
env:
20-
_SOURCE_REPO: ${{ github.event.client_payload.source_repo }}
21-
_SDK_VERSION: ${{ github.event.client_payload.sdk_version }}
22-
_ARTIFACTS_RUN_ID: ${{ github.event.client_payload.artifacts_info.run_id }}
23-
_ARTIFACT_NAME: ${{ github.event.client_payload.artifacts_info.artifact_name }}
24-
_CLIENT_LABEL: ${{ github.event.client_payload.client_label }}
25-
36+
_SOURCE_REPO: ${{ github.event.inputs.source_repo }}
37+
_SDK_VERSION: ${{ github.event.inputs.sdk_version }}
38+
_ARTIFACTS_RUN_ID: ${{ github.event.inputs.artifacts_run_id }}
39+
_ARTIFACT_NAME: ${{ github.event.inputs.artifact_name }}
40+
2641
steps:
2742
- name: Log in to Azure
2843
uses: bitwarden/gh-actions/azure-login@main
@@ -45,21 +60,7 @@ jobs:
4560
private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }}
4661
- name: Log out from Azure
4762
uses: bitwarden/gh-actions/azure-logout@main
48-
- name: Validate inputs
49-
run: |
50-
echo "🔍 Validating required client_payload fields..."
51-
52-
if [ -z "${_SOURCE_REPO}" ] || [ -z "${_SDK_VERSION}" ] || [ -z "${_ARTIFACTS_RUN_ID}" ] || [ -z "${_ARTIFACT_NAME}" ]; then
53-
echo "::error::Missing required client_payload fields"
54-
echo "SOURCE_REPO: ${_SOURCE_REPO}"
55-
echo "SDK_VERSION: ${_SDK_VERSION}"
56-
echo "ARTIFACTS_RUN_ID: ${_ARTIFACTS_RUN_ID}"
57-
echo "ARTIFACT_NAME: ${_ARTIFACT_NAME}"
58-
echo "CLIENT_LABEL: ${_CLIENT_LABEL}"
59-
exit 1
60-
fi
6163

62-
echo "✅ All required payload fields are present"
6364
- name: Check out clients repository
6465
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
6566
with:
@@ -134,34 +135,30 @@ jobs:
134135
- name: Run TypeScript compatibility check
135136
run: |
136137
137-
echo "🔍 Running TypeScript type checking for ${_CLIENT_LABEL} client with SDK version: ${_SDK_VERSION}"
138+
echo "🔍 Running TypeScript type checking with SDK version: ${_SDK_VERSION}"
138139
echo "🎯 Type checking command: npm run test:types"
139140
140141
# Add GitHub Step Summary output
141-
{
142-
echo "## 📊 TypeScript Compatibility Check (${_CLIENT_LABEL})"
143-
echo "- **Client**: ${_CLIENT_LABEL}"
144-
echo "- **SDK Version**: ${_SDK_VERSION}"
145-
echo "- **Source Repository**: ${_SOURCE_REPO}"
146-
echo "- **Artifacts Run ID**: ${_ARTIFACTS_RUN_ID}"
147-
echo ""
148-
} >> "$GITHUB_STEP_SUMMARY"
149-
150-
142+
echo "## 📊 TypeScript Compatibility Check" >> $GITHUB_STEP_SUMMARY
143+
echo "- **SDK Version**: ${_SDK_VERSION}" >> $GITHUB_STEP_SUMMARY
144+
echo "- **Source Repository**: ${_SOURCE_REPO}" >> $GITHUB_STEP_SUMMARY
145+
echo "- **Artifacts Run ID**: ${_ARTIFACTS_RUN_ID}" >> $GITHUB_STEP_SUMMARY
146+
echo "" >> $GITHUB_STEP_SUMMARY
147+
151148
TYPE_CHECK_START=$(date +%s)
152149
153150
# Run type check with timeout - exit code determines gh run watch result
154151
if timeout 10m npm run test:types; then
155152
TYPE_CHECK_END=$(date +%s)
156153
TYPE_CHECK_DURATION=$((TYPE_CHECK_END - TYPE_CHECK_START))
157-
echo "✅ TypeScript compilation successful for ${_CLIENT_LABEL} client (${TYPE_CHECK_DURATION}s)"
158-
echo "✅ **Result**: TypeScript compilation successful" >> "$GITHUB_STEP_SUMMARY"
159-
echo "No breaking changes detected in ${_CLIENT_LABEL} client for SDK version ${_SDK_VERSION}" >> "$GITHUB_STEP_SUMMARY"
154+
echo "✅ TypeScript compilation successful (${TYPE_CHECK_DURATION}s)"
155+
echo "✅ **Result**: TypeScript compilation successful" >> $GITHUB_STEP_SUMMARY
156+
echo "No breaking changes detected for SDK version ${_SDK_VERSION}" >> $GITHUB_STEP_SUMMARY
160157
else
161158
TYPE_CHECK_END=$(date +%s)
162159
TYPE_CHECK_DURATION=$((TYPE_CHECK_END - TYPE_CHECK_START))
163-
echo "❌ TypeScript compilation failed for ${_CLIENT_LABEL} client after ${TYPE_CHECK_DURATION}s - breaking changes detected"
164-
echo "❌ **Result**: TypeScript compilation failed" >> "$GITHUB_STEP_SUMMARY"
165-
echo "Breaking changes detected in ${_CLIENT_LABEL} client for SDK version ${_SDK_VERSION}" >> "$GITHUB_STEP_SUMMARY"
160+
echo "❌ TypeScript compilation failed after ${TYPE_CHECK_DURATION}s - breaking changes detected"
161+
echo "❌ **Result**: TypeScript compilation failed" >> $GITHUB_STEP_SUMMARY
162+
echo "Breaking changes detected for SDK version ${_SDK_VERSION}" >> $GITHUB_STEP_SUMMARY
166163
exit 1
167-
fi
164+
fi

apps/browser/src/_locales/ar/messages.json

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,12 +1523,6 @@
15231523
"enableAutoBiometricsPrompt": {
15241524
"message": "اسأل عن القياسات الحيوية عند الإطلاق"
15251525
},
1526-
"premiumRequired": {
1527-
"message": "حساب البريميوم مطلوب"
1528-
},
1529-
"premiumRequiredDesc": {
1530-
"message": "هذه المِيزة متاحة فقط للعضوية المميزة."
1531-
},
15321526
"authenticationTimeout": {
15331527
"message": "مهلة المصادقة"
15341528
},
@@ -1641,6 +1635,9 @@
16411635
"selfHostedEnvFormInvalid": {
16421636
"message": "يجب عليك إضافة رابط الخادم الأساسي أو على الأقل بيئة مخصصة."
16431637
},
1638+
"selfHostedEnvMustUseHttps": {
1639+
"message": "URLs must use HTTPS."
1640+
},
16441641
"customEnvironment": {
16451642
"message": "بيئة مخصصة"
16461643
},
@@ -4977,6 +4974,16 @@
49774974
}
49784975
}
49794976
},
4977+
"defaultLabelWithValue": {
4978+
"message": "Default ( $VALUE$ )",
4979+
"description": "A label that indicates the default value for a field with the current default value in parentheses.",
4980+
"placeholders": {
4981+
"value": {
4982+
"content": "$1",
4983+
"example": "Base domain"
4984+
}
4985+
}
4986+
},
49804987
"showMatchDetection": {
49814988
"message": "Show match detection $WEBSITE$",
49824989
"placeholders": {
@@ -5769,6 +5776,30 @@
57695776
"atRiskLoginsSecured": {
57705777
"message": "Great job securing your at-risk logins!"
57715778
},
5779+
"upgradeNow": {
5780+
"message": "Upgrade now"
5781+
},
5782+
"builtInAuthenticator": {
5783+
"message": "Built-in authenticator"
5784+
},
5785+
"secureFileStorage": {
5786+
"message": "Secure file storage"
5787+
},
5788+
"emergencyAccess": {
5789+
"message": "Emergency access"
5790+
},
5791+
"breachMonitoring": {
5792+
"message": "Breach monitoring"
5793+
},
5794+
"andMoreFeatures": {
5795+
"message": "And more!"
5796+
},
5797+
"planDescPremium": {
5798+
"message": "Complete online security"
5799+
},
5800+
"upgradeToPremium": {
5801+
"message": "Upgrade to Premium"
5802+
},
57725803
"settingDisabledByPolicy": {
57735804
"message": "This setting is disabled by your organization's policy.",
57745805
"description": "This hint text is displayed when a user setting is disabled due to an organization policy."

0 commit comments

Comments
 (0)