Prepare for launch
This commit is contained in:
53
.cursor/skills/prepare-for-launch/SKILL.md
Normal file
53
.cursor/skills/prepare-for-launch/SKILL.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
name: prepare-for-launch
|
||||||
|
description: Prepares the app for production launch by moving from sandbox to production (GoLive) database and related steps. Use when the user asks to prepare for launch, move to production, switch to GoLive, or launch the app.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Prepare for Launch
|
||||||
|
|
||||||
|
Use this skill when preparing to launch the app: moving all data sources from sandbox to the production (xTuple_GoLive) database and performing launch checklist steps.
|
||||||
|
|
||||||
|
## Launch checklist (run in order)
|
||||||
|
|
||||||
|
1. **Switch all queries to xTuple_GoLive** (see below).
|
||||||
|
2. Add or run any other launch steps you need (e.g. env/config, final checks).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 1: Move every query to xTuple_GoLive
|
||||||
|
|
||||||
|
Ensure every DB query in the app uses the production datasource `xTuple_GoLive` instead of `xTuple_Sandbox`.
|
||||||
|
|
||||||
|
### How to do it
|
||||||
|
|
||||||
|
1. **Find all query metadata files**
|
||||||
|
Under `pages/`, each query has a `metadata.json` in `pages/<PageName>/queries/<query_name>/metadata.json`.
|
||||||
|
|
||||||
|
2. **In each `metadata.json`**, locate the datasource block inside `unpublishedAction`:
|
||||||
|
```json
|
||||||
|
"datasource": {
|
||||||
|
"id": "xTuple_Sandbox",
|
||||||
|
"isAutoGenerated": false,
|
||||||
|
"name": "xTuple_Sandbox",
|
||||||
|
"pluginId": "postgres-plugin"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Replace** both `"id"` and `"name"` from `xTuple_Sandbox` to `xTuple_GoLive`:
|
||||||
|
```json
|
||||||
|
"datasource": {
|
||||||
|
"id": "xTuple_GoLive",
|
||||||
|
"isAutoGenerated": false,
|
||||||
|
"name": "xTuple_GoLive",
|
||||||
|
"pluginId": "postgres-plugin"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Verify**
|
||||||
|
- No query under `pages/**/queries/**/metadata.json` should reference `xTuple_Sandbox`.
|
||||||
|
- Search the repo for `xTuple_Sandbox`; the only remaining references should be the datasource definition (e.g. `datasources/xTuple_Sandbox.json`) and any docs/skills that describe sandbox as the default (e.g. add-query skill).
|
||||||
|
|
||||||
|
### Scope
|
||||||
|
|
||||||
|
- Update **every** query that currently uses `xTuple_Sandbox`. Queries already using `xTuple_GoLive` can be left unchanged.
|
||||||
|
- Do not change the add-query (or other) skills that say to use Sandbox by default; those are for day-to-day development. This skill is only for the one-time (or repeated) launch prep.
|
||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [
|
"dynamicBindingPathList": [
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [
|
"dynamicBindingPathList": [
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
},
|
},
|
||||||
"confirmBeforeExecute": false,
|
"confirmBeforeExecute": false,
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"id": "xTuple_Sandbox",
|
"id": "xTuple_GoLive",
|
||||||
"isAutoGenerated": false,
|
"isAutoGenerated": false,
|
||||||
"name": "xTuple_Sandbox",
|
"name": "xTuple_GoLive",
|
||||||
"pluginId": "postgres-plugin"
|
"pluginId": "postgres-plugin"
|
||||||
},
|
},
|
||||||
"dynamicBindingPathList": [],
|
"dynamicBindingPathList": [],
|
||||||
|
|||||||
Reference in New Issue
Block a user