Skip to content

Commit b4f871d

Browse files
committed
Merge branch 'main' of https://github.com/aimane-chnaif/Expensify into feature-84764-2
2 parents adc34fb + e149717 commit b4f871d

227 files changed

Lines changed: 4364 additions & 1371 deletions

File tree

Some content is hidden

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

.github/workflows/cherryPick.yml

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,79 @@ jobs:
211211
git push origin ${{ inputs.TARGET }}
212212
fi
213213
214+
- name: Find deploy workflow run
215+
# Also runs for version-bump-only CPs where HAS_CONFLICTS is unset
216+
if: ${{ steps.cherryPick.outputs.HAS_CONFLICTS != 'true' }}
217+
id: findDeployRun
218+
run: |
219+
PUSH_SHA=$(git rev-parse HEAD)
220+
echo "Push SHA: $PUSH_SHA"
221+
222+
DEPLOY_RUN_URL=""
223+
for i in 1 2 3 4 5 6; do
224+
echo "Polling for deploy run (attempt $i)..."
225+
sleep 10
226+
DEPLOY_RUN_URL=$(gh api \
227+
"repos/${{ github.repository }}/actions/workflows/deploy.yml/runs?head_sha=$PUSH_SHA&per_page=1" \
228+
--jq '.workflow_runs[0].html_url // empty' 2>/dev/null || true)
229+
if [ -n "$DEPLOY_RUN_URL" ]; then
230+
echo "Found deploy run: $DEPLOY_RUN_URL"
231+
break
232+
fi
233+
done
234+
235+
FALLBACK_URL="https://github.com/${{ github.repository }}/actions/workflows/deploy.yml"
236+
if [ -z "$DEPLOY_RUN_URL" ]; then
237+
echo "::warning::Could not find deploy workflow run for SHA $PUSH_SHA"
238+
{
239+
echo "DEPLOY_RUN_FOUND=false"
240+
echo "DEPLOY_RUN_URL=$FALLBACK_URL"
241+
echo "DEPLOY_RUN_MESSAGE=⚠️ Could not locate deploy run — check $FALLBACK_URL"
242+
} >> "$GITHUB_OUTPUT"
243+
else
244+
{
245+
echo "DEPLOY_RUN_FOUND=true"
246+
echo "DEPLOY_RUN_URL=$DEPLOY_RUN_URL"
247+
echo "DEPLOY_RUN_MESSAGE=$DEPLOY_RUN_URL"
248+
} >> "$GITHUB_OUTPUT"
249+
fi
250+
env:
251+
GITHUB_TOKEN: ${{ github.token }}
252+
253+
- name: Announce successful CP in #deployer
254+
# Also runs for version-bump-only CPs where HAS_CONFLICTS is unset
255+
if: ${{ steps.cherryPick.outputs.HAS_CONFLICTS != 'true' }}
256+
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e
257+
with:
258+
status: custom
259+
custom_payload: |
260+
{
261+
channel: '#deployer',
262+
attachments: [{
263+
color: 'good',
264+
text: `🍒 Cherry-pick to *${{ inputs.TARGET }}* successful\nPR: ${{ inputs.PULL_REQUEST_URL || '(version bump only)' }}\nDeploy workflow: ${{ steps.findDeployRun.outputs.DEPLOY_RUN_MESSAGE }}`
265+
}]
266+
}
267+
env:
268+
GITHUB_TOKEN: ${{ github.token }}
269+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
270+
271+
- name: Write workflow summary
272+
# Also runs for version-bump-only CPs where HAS_CONFLICTS is unset
273+
if: ${{ steps.cherryPick.outputs.HAS_CONFLICTS != 'true' }}
274+
run: |
275+
{
276+
echo "## Cherry-pick successful"
277+
echo ""
278+
echo "**Target:** \`${{ inputs.TARGET }}\`"
279+
echo "**PR:** ${{ inputs.PULL_REQUEST_URL || 'N/A (version bump only)' }}"
280+
if [[ "${{ steps.findDeployRun.outputs.DEPLOY_RUN_FOUND }}" == "true" ]]; then
281+
echo "**Deploy workflow:** ${{ steps.findDeployRun.outputs.DEPLOY_RUN_URL }}"
282+
else
283+
echo "**Deploy workflow:** :warning: Could not locate deploy run — check [${{ inputs.TARGET }} deploy runs](${{ steps.findDeployRun.outputs.DEPLOY_RUN_URL }})"
284+
fi
285+
} >> "$GITHUB_STEP_SUMMARY"
286+
214287
- name: Create Pull Request to manually finish CP
215288
if: steps.cherryPick.outputs.HAS_CONFLICTS == 'true'
216289
id: createPullRequest

Mobile-Expensify

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ android {
111111
minSdkVersion rootProject.ext.minSdkVersion
112112
targetSdkVersion rootProject.ext.targetSdkVersion
113113
multiDexEnabled rootProject.ext.multiDexEnabled
114-
versionCode 1009033801
115-
versionName "9.3.38-1"
114+
versionCode 1009033900
115+
versionName "9.3.39-0"
116116
// Supported language variants must be declared here to avoid from being removed during the compilation.
117117
// This also helps us to not include unnecessary language variants in the APK.
118118
resConfigs "en", "es"

assets/images/car-plus.svg

Lines changed: 1 addition & 0 deletions
Loading

assets/images/document-plus.svg

Lines changed: 1 addition & 0 deletions
Loading

assets/images/envelope-open-star.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

docs/articles/expensify-classic/expenses/Expense-Types.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ Use filters to narrow down the data:
6969
2. Adjust the filters at the top of the page:
7070
- **Date Range** – Select a specific time frame.
7171
- **Merchant Name** – Find expenses from a particular vendor (partial searches work).
72-
- **Workspace** – View expenses for a specific Group or Individual Workspace.
72+
- **Workspace** – View expenses for a specific workspace.
7373
- **Categories** – Filter by category to refine your search.
7474
- **Tags** – Locate expenses based on assigned tags.
7575
- **Submitters** – Find expenses by employee or vendor.

docs/articles/expensify-classic/expensify-billing/Change-Plan-Or-Subscription.md

Lines changed: 17 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,14 @@ keywords: [Expensify Classic, workspace plan, subscription]
55
---
66

77

8-
Expensify offers several plans based on your needs: **Track, Submit, Collect, Control,** and **Free**. Your choice depends on whether you manage expenses individually, for a group, or for a company. You may need to upgrade if you hire employees who need access to a **Group Workspace** or require features exclusive to paid plans.
8+
Expensify offers several plans based on your needs: **Collect, Control,** and **Free**. You may need to upgrade if you hire employees who need access to your workspace or require features exclusive to paid plans.
99

1010
---
1111

12-
# Change a Subscription on an Individual Plan
12+
# Changing Your Subscription
1313

1414
**Web:**
15-
1. Go to **Settings > Workspaces > Individual > [Workspace Name]**.
16-
2. Click **Overview** and select **Switch** under your desired plan.
17-
18-
**Mobile:**
19-
1. Open the Expensify app.
20-
2. Tap the **hamburger menu** (three lines) on the top left.
21-
3. Tap **Settings**.
22-
4. Tap **View All** under your Workspace.
23-
5. Select the Workspace under the **Individual** tab.
24-
6. Tap **Current Plan**.
25-
7. Tap **Switch** to change plans.
26-
27-
## Upgrade to a Group Workspace
28-
1. Go to **Settings > Workspaces > Group**.
29-
2. Select a **Collect** or **Control** plan.
30-
31-
---
32-
33-
# Changing a Subscription on a Group Plan
34-
35-
**Web:**
36-
1. Go to **Settings > Workspaces > Group > [Your Group Workspace]**.
15+
1. Go to **Settings > Workspaces > [Your Workspace]**.
3716
2. Click **Overview** and select **Switch** under your desired plan.
3817

3918
**Mobile:**
@@ -42,48 +21,32 @@ Expensify offers several plans based on your needs: **Track, Submit, Collect, Co
4221

4322
---
4423

45-
## Adjust Subscription Size
46-
1. Go to **Settings > Workspaces > Group > Subscription**.
24+
## Adjust Annual Subscription Size
25+
1. Go to **Settings > Workspaces > Subscription**.
4726
2. Enter the desired number in the **Subscription size** field.
4827
- If left blank, your subscription size will be set automatically:
4928
- **New Workspaces**: Based on active users in the first month.
5029
- **Existing Workspaces Switching to Annual**: Based on the last month's active users.
5130

5231
## Auto-Increase Subscription Size
53-
1. Go to **Settings > Workspaces > Group > Subscription**.
54-
2. Toggle **Auto-increase annual seats**.
32+
1. Go to **Settings > Workspaces > Subscription**.
33+
2. Toggle **Auto Increase Subscription Size**.
5534
3. When enabled, your subscription size will adjust automatically based on usage, triggering a new 12-month commitment for the updated size.
5635

5736
## Auto-Renew Subscription
58-
1. Go to **Settings > Workspaces > Group > Subscription**.
59-
2. Toggle **Auto-renew** off before your current subscription ends if you do not want it to renew.
60-
- If **Auto-renew** is disabled, your final bill at the annual rate will be issued on the date listed under **Subscriptions**.
61-
62-
---
63-
64-
# Downgrading to a Free Account from an Individual Plan
65-
66-
**Web:**
67-
1. Log in via a web browser.
68-
2. Go to **Settings > Workspaces > Individual > Subscription**.
69-
3. Click **Cancel Subscription**.
70-
- **Note**: The subscription is prepaid for 30 days of unlimited **SmartScanning**. No refunds are issued, but you retain access until the period ends.
71-
72-
**App Store (iOS Users):**
73-
1. Go to the **App Store**.
74-
2. Tap your **Apple ID** > **Subscriptions**.
75-
3. Cancel your Expensify subscription.
76-
- **Note**: This cannot be done within Expensify. Downgrading to a free account must happen from the App Store.
37+
1. Go to **Settings > Workspaces > Subscription**.
38+
2. Toggle **Auto Renew** off before your current subscription ends if you do not want it to renew.
39+
- If **Auto Renew** is disabled, your final bill at the annual rate will be issued on the date listed under **Subscriptions**.
7740

7841
---
7942

80-
# Downgrading to a Free Account from a Group Plan
43+
# Downgrading to a Free Account
8144

8245
## Pay-Per-Use Plan
83-
1. Go to **Settings > Workspaces > Group**.
46+
1. Go to **Settings > Workspaces**.
8447
2. Click the **cog icon** next to your Workspace name.
8548
3. Select **Delete**.
86-
- **Note**: Deleting a Workspace removes its settings and members but does not delete their Expensify accounts.
49+
- **Note**: Only the Billing Owner can delete a Workspace. Deleting a Workspace removes its settings and members but does not delete members' Expensify accounts.
8750
- If any members were active that month (submitted, approved, or edited reports), you will be billed for their usage.
8851

8952
## Annual Subscription
@@ -99,11 +62,11 @@ Once downgraded, your Workspace will be deleted, and a refund line item will app
9962

10063
# FAQ
10164

102-
## Will I be charged for a monthly subscription even if I don't use SmartScans?
65+
## Will I be charged for my subscription even if I don't use SmartScans?
10366

104-
Yes, monthly subscriptions are prepaid and not usage-based, so you will be charged regardless of activity.
67+
Yes, Collect and Control subscriptions are prepaid and not usage-based, so you will be charged regardless of activity.
10568

106-
## I'm in a Group Workspace. Do I need the monthly subscription too?
69+
## I'm in a workspace. Do I need my own subscription too?
10770

108-
No, Group Workspace members already have unlimited **SmartScans**. However, you can keep a subscription for personal use if you leave your company's Workspace.
71+
No, workspace members already have unlimited **SmartScans**. However, you can keep a subscription for personal use if you leave your company's workspace.
10972

docs/articles/expensify-classic/expensify-billing/Personal-and-Corporate-Karma.md

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@ The fund from your Personal Karma is determined by the expense's MCC (Merchant C
2020

2121
## Setting Up Personal Karma Donations
2222

23-
You can enable Personal Karma donations from your personal workspace settings.
24-
25-
1. [Sign in](www.expensify.com) to your web account.
26-
2. Go to **Settings > Workspace > Individual**.
27-
3. Under the **Subscription** section, enable Karma donations.
28-
29-
![Settings > Workspaces > Individual workspace > enable Personal Karma in settings](https://help.expensify.com/assets/images/ExpensifyHelp_OldDot_Karma_Individual.png){:width="100%"}
23+
Personal Karma is now managed in New Expensify. To enable or disable Personal Karma donations, see the [Personal Karma](https://help.expensify.com/articles/new-expensify/settings/Personal-Karma) help page.
3024

3125
---
3226

@@ -40,11 +34,11 @@ The fund to which your Corporate Karma goes is determined by the expense's MCC (
4034

4135
## Setting Up Corporate Karma Donations
4236

43-
As a [workspace billing owner](https://help.expensify.com/articles/expensify-classic/workspaces/Assign-billing-owner-and-payment-account), you can enable Corporate Karma from the group workspace settings.
37+
As a [workspace billing owner](https://help.expensify.com/articles/expensify-classic/workspaces/Assign-billing-owner-and-payment-account), you can enable Corporate Karma from your workspace settings.
4438

45-
1. [Sign in](www.expensify.com) to your web account.
46-
2. Go to **Settings > Workspace > Group**.
47-
3. Under the **Subscription** section, enable Karma donations.
39+
1. [Sign in](https://www.expensify.com) to your web account.
40+
2. Go to **Settings > Workspace > [Your Workspace Name] > Subscription**.
41+
3. Enable Karma donations.
4842

4943
![Settings > Workspaces > Group > enable Corporate Karma in subscription settings](https://help.expensify.com/assets/images/ExpensifyHelp_OldDot_Karma_Group.png){:width="100%"}
5044

docs/articles/expensify-classic/getting-started/Create-a-workspace-for-yourself.md

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ keywords: [Expensify Classic, create workspace, new workspace, getting started]
66

77
Creating a workspace in Expensify Classic is the first step to organizing your expenses and managing your finances efficiently. This guide walks you through setting up your workspace so you can seamlessly track receipts, submit reports, and stay on top of your spending.
88

9-
All Expensify accounts include an Individual Workspace, which allows you to track personal expenses. If you want to connect your personal expenses to an accounting or travel integration, you can create a Group Workspace — even if you are the only member.
9+
You can create a workspace to track personal expenses and connect to accounting or travel integrations — even if you are the only member.
1010

1111
---
1212

@@ -29,24 +29,9 @@ Your personal assistant, **Concierge**, is available on your Expensify Home page
2929

3030
# 3. Create a Workspace
3131

32-
## Individual vs. Group Workspaces
33-
- **Individual Workspace**: A private space for managing your personal expenses.
34-
- **Group Workspace**: Designed for teams, even if you’re the only member. Group workspaces include features like expense approval flows and integrations with accounting, HR, and travel tools.
35-
36-
## Set Up Your Individual Workspace
37-
1. Go to **Settings** > **Workspaces**.
38-
2. Click the **Individual** tab on the left.
39-
3. Click the workspace name to set up your Individual Workspace.
40-
4. Go to Plan on the workspace menu to select the workspace type that fits your needs.
41-
5. Configure your workspace details (e.g., workspace name, categories, tags, etc).
42-
43-
Note: The Individual Workspace is an underlying component of Expensify Classic. It cannot be deleted, and you can't add additional Individual Workspaces. Only additional Group Workspaces can be added manually (see below). Individual workspaces don't connect directly to accounting software or have the ability to add users.
44-
45-
## Create a Group Workspace
4632
1. Go to **Settings** > **Workspaces**.
47-
2. Click the **Group** tab on the left.
48-
3. Click **New Workspace**.
49-
4. Set up the workspace details (e.g., name, expense rules, categories).
33+
2. Click **New Workspace**.
34+
3. Set up the workspace details (e.g., name, expense rules, categories).
5035

5136
---
5237

@@ -127,13 +112,13 @@ When logging in, use the Magic Code from your email and the 6-digit code from yo
127112

128113
# FAQ
129114

130-
## Is the Individual workspace free?
115+
## Can I use Expensify for free?
131116

132-
Yes, individuals can use Expensify for free to track expenses.
117+
Yes, you can use Expensify for free to track expenses.
133118

134-
## Can I create a Group workspace to use just for myself?
119+
## Can I create a workspace to use just for myself?
135120

136-
Yes, group workspaces include key features such as more robust approval rules, direct connections to accounting integrations, and access to Expensify Travel. These are helpful features for automating expense tracking, even if you are the only member of the workspace.
121+
Yes, a workspace includes features such as approval rules, direct connections to accounting integrations, and access to Expensify Travel -- even if you are the only member.
137122

138123
See pricing details [here](https://help.expensify.com/articles/new-expensify/billing-and-subscriptions/Plan-types-and-pricing).
139124

0 commit comments

Comments
 (0)