Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update trial messaging #3720

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ Yes. All features are free to use on all repos, **except** for `Pro` features, w

While GitLens offers a remarkable set of free features, a subset of `Pro` features tailored for professional developers and teams, require a trial or paid plan for use on privately-hosted repos — use on local or publicly-hosted repos is free for everyone. Additionally `Preview` features may require a paid plan in the future and some, if cloud-backed, require a GitKraken account.

Preview `Pro` features instantly for free for 3 days without an account, or start a free GitLens Pro trial to get an additional 7 days and gain access to `Pro` features to experience the full power of GitLens.
Preview `Pro` features instantly for free for 3 days without an account, or start a free GitLens Pro trial to get an additional 14 days and gain access to `Pro` features to experience the full power of GitLens.

## Are `Pro` and `Preview` features free to use?

Expand Down
75 changes: 21 additions & 54 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19201,7 +19201,7 @@
},
{
"view": "gitlens.views.drafts",
"contents": "Cloud Patches ᴘʀᴇᴠɪᴇᴡ — easily and securely share code with your teammates or other developers, accessible from anywhere, streamlining your workflow with better collaboration."
"contents": "Cloud Patches ᴘʀᴇᴠɪᴇᴡ — easily and securely share code with your teammates and other developers without adding noise to your repository."
},
{
"view": "gitlens.views.drafts",
Expand All @@ -19210,16 +19210,17 @@
},
{
"view": "gitlens.views.drafts",
"contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22cloud-patches%22%7D)\n\nStart your free 7-day Pro trial to try Cloud Patches and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22cloud-patches%22%7D).",
"contents": "Preview feature - requires an account and may require [GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/) in the future.\n[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22cloud-patches%22%7D)\n\nGet 14 days of GitLens Pro for free - no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22cloud-patches%22%7D).",
"when": "!gitlens:plus"
},
{
"view": "gitlens.views.drafts",
"contents": "Preview feature ☁️ — requires an account and may require a paid plan in the future."
"view": "gitlens.views.launchpad",
"contents": "[Launchpad](command:gitlens.views.launchpad.info \"Learn about Launchpad\") — organizes your pull requests into actionable groups to help you focus and keep your team unblocked."
},
{
"view": "gitlens.views.launchpad",
"contents": "[Launchpad](command:gitlens.views.launchpad.info \"Learn about Launchpad\") — organizes your pull requests into actionable groups to help you focus and keep your team unblocked."
"contents": "Pro feature — requires a paid plan for use on privately-hosted repos.",
"when": "!gitlens:plus"
},
{
"view": "gitlens.views.scm.grouped",
Expand Down Expand Up @@ -19248,23 +19249,13 @@
},
{
"view": "gitlens.views.launchpad",
"contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nContinuing gives you 3 days to preview Launchpad and other local Pro features for 3 days. [Start 7-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D) for full access to Pro features.",
"when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 0"
},
{
"view": "gitlens.views.scm.grouped",
"contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nContinuing gives you 3 days to preview Launchpad and other local Pro features for 3 days. [Start 7-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D) for full access to Pro features.",
"when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 0 && gitlens:views:scm:grouped:view == launchpad"
},
{
"view": "gitlens.views.launchpad",
"contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nStart your free 7-day Pro trial to try Launchpad and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D).",
"when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 2"
"contents": "[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nGet 14 days of GitLens Pro for free - no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D).",
"when": "!gitlens:launchpad:connect && gitlens:plus:required && (gitlens:plus:state == 2 || gitlens:plus:state == 0)"
},
{
"view": "gitlens.views.scm.grouped",
"contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nStart your free 7-day Pro trial to try Launchpad and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D).",
"when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 2 && gitlens:views:scm:grouped:view == launchpad"
"contents": "[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nGet 14 days of GitLens Pro for free - no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D).",
"when": "!gitlens:launchpad:connect && gitlens:plus:required && (gitlens:plus:state == 0 || gitlens:plus:state == 2) && gitlens:views:scm:grouped:view == launchpad"
},
{
"view": "gitlens.views.launchpad",
Expand Down Expand Up @@ -19308,19 +19299,14 @@
},
{
"view": "gitlens.views.launchpad",
"contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nReactivate your Pro trial and experience Launchpad and all the new Pro features — free for another 7 days!",
"contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nReactivate your Pro trial and experience Launchpad and all the new Pro features — free for another 14 days!",
"when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 5"
},
{
"view": "gitlens.views.scm.grouped",
"contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nReactivate your Pro trial and experience Launchpad and all the new Pro features — free for another 7 days!",
"contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nReactivate your Pro trial and experience Launchpad and all the new Pro features — free for another 14 days!",
"when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 5 && gitlens:views:scm:grouped:view == launchpad"
},
{
"view": "gitlens.views.launchpad",
"contents": "Pro feature — requires a paid plan for use on privately-hosted repos.",
"when": "!gitlens:launchpad:connect"
},
{
"view": "gitlens.views.scm.grouped",
"contents": "Pro feature — requires a paid plan for use on privately-hosted repos.",
Expand All @@ -19337,7 +19323,7 @@
},
{
"view": "gitlens.views.workspaces",
"contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22workspaces%22%7D)\n\nStart your free 7-day Pro trial to try GitKraken (GK) Workspaces and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22workspaces%22%7D).",
"contents": "Use on privately-hosted repos requires [GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/).\n[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22workspaces%22%7D)\n\nGet 14 days of GitLens Pro for free - no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22workspaces%22%7D).",
"when": "!gitlens:plus"
},
{
Expand All @@ -19346,7 +19332,7 @@
},
{
"view": "gitlens.views.worktrees",
"contents": "[Worktrees](https://help.gitkraken.com/gitlens/side-bar/#worktrees-view-pro) ᴾᴿᴼ — minimize context switching by allowing you to work on multiple branches simultaneously."
"contents": "[Worktrees](https://help.gitkraken.com/gitlens/side-bar/#worktrees-view-pro) ᴾᴿᴼ — minimize context switching by working on multiple branches simultaneously."
},
{
"view": "gitlens.views.scm.grouped",
Expand Down Expand Up @@ -19375,27 +19361,17 @@
},
{
"view": "gitlens.views.worktrees",
"contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nContinuing gives you 3 days to preview Worktrees and other local Pro features for 3 days. [Start 7-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D) for full access to Pro features.",
"when": "gitlens:plus:required && gitlens:plus:state == 0"
},
{
"view": "gitlens.views.scm.grouped",
"contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nContinuing gives you 3 days to preview Worktrees and other local Pro features for 3 days. [Start 7-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D) for full access to Pro features.",
"when": "gitlens:plus:required && gitlens:plus:state == 0 && gitlens:views:scm:grouped:view == worktrees"
},
{
"view": "gitlens.views.worktrees",
"contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D)\n\nStart your free 7-day Pro trial to try Worktrees and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D).",
"when": "gitlens:plus:required && gitlens:plus:state == 2"
"contents": "Use on privately-hosted repos requires [GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/).\n[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D)\n\nGet 14 days of GitLens Pro for free - no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D).",
"when": "gitlens:plus:required && (gitlens:plus:state == 2 || gitlens:plus:state == 0)"
},
{
"view": "gitlens.views.scm.grouped",
"contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D)\n\nStart your free 7-day Pro trial to try Worktrees and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D).",
"when": "gitlens:plus:required && gitlens:plus:state == 2 && gitlens:views:scm:grouped:view == worktrees"
"contents": "[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D)\n\nGet 14 days of GitLens Pro for free - no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D).",
"when": "gitlens:plus:required && (gitlens:plus:state == 0 || gitlens:plus:state == 2) && gitlens:views:scm:grouped:view == worktrees"
},
{
"view": "gitlens.views.worktrees",
"contents": "[Upgrade to Pro](command:gitlens.plus.upgrade?%7B%22source%22%3A%22worktrees%22%7D)",
"contents": "Use on privately-hosted repos requires [GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro?%7B%22source%22%3A%22worktrees%22%7D).\n\n[Upgrade to Pro](command:gitlens.plus.upgrade?%7B%22source%22%3A%22worktrees%22%7D)",
"when": "gitlens:plus:required && gitlens:plus:state == 4"
},
{
Expand Down Expand Up @@ -19423,30 +19399,21 @@
"contents": "Save more than 55% during our GitLens 16 sale!",
"when": "gitlens:plus:required && gitlens:plus:state == 4 && gitlens:promo == gitlens16 && gitlens:views:scm:grouped:view == worktrees"
},
{
"view": "gitlens.views.worktrees",
"contents": "Your Pro trial has ended. Please upgrade for full access to Worktrees and other Pro features.",
"when": "gitlens:plus:required && gitlens:plus:state == 4"
},
{
"view": "gitlens.views.scm.grouped",
"contents": "Your Pro trial has ended. Please upgrade for full access to Worktrees and other Pro features.",
"when": "gitlens:plus:required && gitlens:plus:state == 4 && gitlens:views:scm:grouped:view == worktrees"
},
{
"view": "gitlens.views.worktrees",
"contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nReactivate your Pro trial and experience Worktrees and all the new Pro features — free for another 7 days!",
"contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nReactivate your Pro trial and experience Worktrees and all the new Pro features — free for another 14 days!",
"when": "gitlens:plus:required && gitlens:plus:state == 5"
},
{
"view": "gitlens.views.scm.grouped",
"contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nReactivate your Pro trial and experience Worktrees and all the new Pro features — free for another 7 days!",
"contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nReactivate your Pro trial and experience Worktrees and all the new Pro features — free for another 14 days!",
"when": "gitlens:plus:required && gitlens:plus:state == 5 && gitlens:views:scm:grouped:view == worktrees"
},
{
"view": "gitlens.views.worktrees",
"contents": "Pro feature — requires a paid plan for use on privately-hosted repos."
},
{
"view": "gitlens.views.scm.grouped",
"contents": "Pro feature — requires a paid plan for use on privately-hosted repos.",
Expand Down
2 changes: 1 addition & 1 deletion src/constants.subscription.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export const proPreviewLengthInDays = 3;
export const proTrialLengthInDays = 7;
export const proTrialLengthInDays = 14;

export type PromoKeys = 'gitlens16' | 'pro50';

Expand Down
1 change: 1 addition & 0 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ export const urls = Object.freeze({
desktop: `https://gitkraken.com/git-client?${utm}`,

releaseNotes: `https://help.gitkraken.com/gitlens/gitlens-release-notes-current/?${utm}`,
gitlensProVsCommunity: `https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/?${utm}`,
});

export type WalkthroughSteps =
Expand Down
44 changes: 18 additions & 26 deletions src/plus/gk/account/subscriptionService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -315,33 +315,30 @@ export class SubscriptionService implements Disposable {
} = this._subscription;

if (account?.verified === false) {
const days = getSubscriptionTimeRemaining(this._subscription, 'days') ?? proTrialLengthInDays;

const verify: MessageItem = { title: 'Resend Email' };
const learn: MessageItem = { title: 'See Pro Features' };
const learn: MessageItem | undefined = isSubscriptionPaid(this._subscription)
? { title: 'See Pro Features' }
: undefined;
const confirm: MessageItem = { title: 'Continue', isCloseAffordance: true };

const result = await window.showInformationMessage(
isSubscriptionPaid(this._subscription)
? `You are now on the ${actual.name} plan. \n\nYou must first verify your email. Once verified, you will have full access to Pro features.`
: `Welcome to your ${
effective.name
} Trial.\n\nYou must first verify your email. Once verified, you will have full access to Pro features for ${
days < 1 ? '<1 more day' : pluralize('day', days, { infix: ' more ' })
}.`,
: `Welcome to GitLens.`,
{
modal: true,
detail: `Your ${
isSubscriptionPaid(this._subscription) ? 'plan' : 'trial'
} also includes access to the GitKraken DevEx platform, unleashing powerful Git visualization & productivity capabilities everywhere you work: IDE, desktop, browser, and terminal.`,
detail: isSubscriptionPaid(this._subscription)
? `Your ${
isSubscriptionPaid(this._subscription) ? 'plan' : 'trial'
} also includes access to the GitKraken DevEx platform, unleashing powerful Git visualization & productivity capabilities everywhere you work: IDE, desktop, browser, and terminal.`
: `Verify the email we just sent you to start your Pro trial.`,
},
verify,
learn,
confirm,
...([verify, learn, confirm].filter(Boolean) as MessageItem[]),
);

if (result === verify) {
void this.resendVerification(source);
} else if (result === learn) {
} else if (learn && result === learn) {
void this.learnAboutPro({ source: 'prompt', detail: { action: 'trial-started-verify-email' } }, source);
}
} else if (isSubscriptionPaid(this._subscription)) {
Expand Down Expand Up @@ -711,19 +708,14 @@ export class SubscriptionService implements Disposable {
this.changeSubscription(subscription);

setTimeout(async () => {
const confirm: MessageItem = { title: 'Continue' };
const learn: MessageItem = { title: 'See Pro Features' };
const result = await window.showInformationMessage(
`You can now preview local Pro features for ${
await window.showInformationMessage(
`You can now preview the Commit Graph on privately-hosted repos for ${
days < 1 ? '1 day' : pluralize('day', days)
}, or [start your free ${proTrialLengthInDays}-day Pro trial](command:gitlens.plus.signUp "Start Pro Trial") for full access to Pro features.`,
confirm,
learn,
}, or [start your free ${proTrialLengthInDays}-day Pro trial](command:gitlens.plus.signUp "Start Pro Trial") for full access to all [GitLens Pro](${
urls.gitlensProVsCommunity
}) features.`,
{ title: 'Continue' },
);

if (result === learn) {
void this.learnAboutPro({ source: 'notification', detail: { action: 'preview-started' } }, source);
}
}, 1);
}

Expand Down
4 changes: 2 additions & 2 deletions src/quickpicks/items/directive.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ export function createDirectiveQuickPickItem(
break;
case Directive.StartProTrial:
label = 'Start Pro Trial';
detail = `Start your free ${proTrialLengthInDays}-day Pro trial for full access to Pro features`;
detail = `Start your free ${proTrialLengthInDays}-day GitLens Pro trial - no credit card required.`;
break;
case Directive.RequiresVerification:
label = 'Resend Email';
Expand All @@ -74,7 +74,7 @@ export function createDirectiveQuickPickItem(
case Directive.RequiresPaidSubscription:
label = 'Upgrade to Pro';
if (detail != null) {
description ??= ' \u2014\u00a0\u00a0 a paid plan is required to use this Pro feature';
description ??= ' - access Launchpad and all Pro features with GitLens Pro';
} else {
detail = 'Upgrading to a paid plan is required to use this Pro feature';
}
Expand Down
Loading
Loading