diff --git a/README.md b/README.md index 06ca4203e..d67c7e5a9 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ There are two ways to get help or provide feedback (and we try to always respond ## Development Tools -For information about the development tools used to maintain derived projects (like opensaas.sh), see [tools/README.md](./tools/README.md). +For information about the development tools used to maintain derived projects (like opensaas.sh and template-test), see [tools/README.md](./tools/README.md). ## Contributing diff --git a/opensaas-sh/README.md b/opensaas-sh/README.md index 8d982a572..87ba05df8 100644 --- a/opensaas-sh/README.md +++ b/opensaas-sh/README.md @@ -12,7 +12,7 @@ Inception :)! Since the demo app is just the open saas template with some small tweaks, and we want to be able to easily keep it up to date as the template changes, we don't version (in git) the actual demo app code, instead we version the diffs between it and the template: `app_diff/`. -**Quick Reference:** +#### Workflow - Generate `app/` from template and diffs: `./tools/patch.sh` - Update diffs after modifying `app/`: `./tools/diff.sh` diff --git a/template-test/.gitignore b/template-test/.gitignore new file mode 100644 index 000000000..908f7bbc5 --- /dev/null +++ b/template-test/.gitignore @@ -0,0 +1 @@ +app/ diff --git a/template-test/README.md b/template-test/README.md new file mode 100644 index 000000000..3bc2afeed --- /dev/null +++ b/template-test/README.md @@ -0,0 +1,33 @@ +# Template Testing + +Tests the production version of the Open SaaS template that users get from `wasp new app -t saas`. + +**Why this exists:** As a part of our release checklist, we want to test that the production version of the Open SaaS template works. + +**How it works:** We create a new Wasp app from the production Open SaaS template, and then modify the app to be production-ready (e.g. replace `Dummy` email service with `SMTP`, add Dotenv Vault with real credentials, etc.). + +## Testing a new Wasp release + +When testing a new Wasp release: + +```bash +cd template-test +# Create a new Wasp app and apply our patches to it. +./tools/patch.sh + +cd app + +# Get the environment variables from Dotenv Vault. +npm run env:pull + +# Test that the app works in dev and prod modes. +npx @wasp.sh/wasp-app-runner dev +npx @wasp.sh/wasp-app-runner build +``` + +### If you want to update the template test app + +- Generate `app/` from template and diffs: `./tools/patch.sh` +- Modify the app in `app/` as needed and then update diffs: `./tools/diff.sh` + +For detailed information about the diff/patch workflow and MacOS setup requirements, see [../tools/README.md](../tools/README.md). diff --git a/template-test/app_diff/.env.vault.diff b/template-test/app_diff/.env.vault.diff new file mode 100644 index 000000000..6613d1aa0 --- /dev/null +++ b/template-test/app_diff/.env.vault.diff @@ -0,0 +1,28 @@ +--- /Users/ilakovac/dev/open-saas/template-test/tools/../../template-test/base-app/app/.env.vault ++++ template-test/app/.env.vault +@@ -0,0 +1,25 @@ ++#/-------------------.env.vault---------------------/ ++#/ cloud-agnostic vaulting standard / ++#/ [how it works](https://dotenv.org/env-vault) / ++#/--------------------------------------------------/ ++ ++# development ++DOTENV_VAULT_DEVELOPMENT="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" ++DOTENV_VAULT_DEVELOPMENT_VERSION=2 ++ ++# ci ++DOTENV_VAULT_CI="0kVgjX4gDSFLdOkWOqXHcN6VOvVhMN5wJ9zgF3M7enHE7613DjnvWxS/Xtr2kFNv71jp+Qf51mLpmajTR4kb0whC+uLFa/7xZtXBFV0k5ac4NglcAF2dPbbi2ymqqFzjz5SwTVjQ3xzqpGbmaw/spmoapH1YEaWphA6GSOkJciI8NRqOYsLq7T1AdPrPudt6SUaroRKHD/kPk6ipt7c6sWdkMzKRF2Yv9FVLHDSRr86HCfVjW5FDfgc2eo2ITOONys72Wk/JK1RB1fntT9YIxUP2mX5rWtxsRDw5PPiu4OmrfC93p81BhwlPFMBBV7fOnJKs7jx5NPUEWlPS8xf4StQ9by2/oPmBrsFdzI84ikF6yNvoac7idj2tHsnaOjPWMmTT3Fk88Bt+K0HqMjdpNT7TilEbXbIxP4vq5SjSK9/whnsEqymWFO1aimo+Z6rzC9HNXecoryjtvDk7Y9D60V4oLyNOnSMf4v/+hvIYoAwIfnajVGUQ3y5rw1TLOEm8YQ61DgmArWDk8GhHnk/U6zVIpE8r/wuvYhn5GjMrG+5ZreUJMjRN58Fo/PGJszAciQh65gD5iTlL7qiaM5qgRA7SWuywxJc+3q8YmcHLBAKS1MeSsOw4bHMH1mphO1tSobRvZCS5T/kpCSwbAZviZq5Vx+oFgk39ymAkQ9aKwiTrHtKr0V/BxpqeUt223UC/y3M1TuaCAjs2szKckGa5FPjzWMAdHKShum4ikwGncX6CA5i+c1zimO8+7gj1qQPdZPBpcgHQ2kzX5Njg3InENowIE3RXd+a/ZmKVyP1IkThofsozOgxC+V3OTqriI4SRBIU+ZQ2xfwnsuTETpe/0Bf/pvKanxqebkouHhSUTPK8aF4HOzPbyiPpjFLtw/dmlN9MXdZag02+JGhlMCQ==" ++DOTENV_VAULT_CI_VERSION=2 ++ ++# staging ++DOTENV_VAULT_STAGING="JMEI1tbOz427qXvVvq9eL5gCiTE62+uCHKjt20WI80iwr2ROHrVjeS4rOXVazZ+BWlnyI8utwk1h4qLqxnqE9PlaCxH78MZX/K8Z8DV30QciubrmgnleUuO25EPlivbHqWWn0nQEMGaLemERXisx/fb/F2VG4aJwMzHd0kEGTnIWjEczGV2VlAgrEobPSZBz6BC02ioIOh6+nbJd5aDaMxaxrxuEJUFTxXDjbEigsJfaZyj2BknsUu/hHdCIPP8TNmAZdPBxmjkiu6rLEKxJ/mC8Hjdu/deZa6fiL8rfLN5ckmIJC+oWW57ectOyPMTq2Byxq/GenB1gMCpB/eOpltfXJvwqSPOrk4EsD62Ycdpr5Dxn2Ui/MN7IW0PREQwkawEmgN/hFp/AVqV5x/dQakqnpFek3qG4nl9COvHWkujd0thfjxRg+iYPEZxKvw6jXPMuG5rUAq0hz2uiiQu+sl7EoPgVtMhmHAeA0XLLPN9yAcdTRH0fzXbgv+DCHR9Xi+my/9PNNi3FCQCqcKUiMSWRqA8pL9xGP7J45LICcmHbHuXhbffSp8sGvPthAKLbCiYBEH97PPOzH6qjaU5gz0qd/tM5XhwDYrWE8i/NXCFTX++l4BOJBN9zb71Sx2KALK5c2aQKjpN5LT1bnF30OchDkFXY/p79kuvopQIEkGJlcBBLyf8hgnlgQdx0e/nXFJVTh/evhc3ndp8nATFwZtoKx1Vgvrq4ux09aaO6ErII4QJZqMBjgpGuAMj9RNE0iUFwm1S9BVVyHqndDnr+mTyKpkUEqzGQHWuZ+KuAsnYQHcOJUo1Wh3zYs0BHswBvbenWcrM/0QRRLoSKziNIRfCudT+J/5ED6v/3JOhACvfq6dD7vlLgURof4b8y9bXb27GX2ycyHZGXjlbZgg==" ++DOTENV_VAULT_STAGING_VERSION=2 ++ ++# production ++DOTENV_VAULT_PRODUCTION="eSIUBg42a0f0KXdMcsp1tfg3nEHp6ESJNhNOysVtT8AZC/dAQculRnSkA07aY4mNPyAB7B1Y0MayMdNnnB44drdepJYUNNwsBwCxANVl6hgjll8q6CWEgE8e+vW6jTQJDq0myaCSvCgBqfQYDATTTHVJ1Q4FZECavJlqjfNIaAy09evubbhzTmL9z/i+S7jQJCLmirLET438Hnz04/i2S3CtdtsLEtjLWbUvrSkiVALBYkCFxQcmasoit2U/0fgjGaeNuWtfAB7Iku3CSdmcO8kQBtH0j+7TbW7I0cfVTUYH9ipcQCy0vjwx1GwsHWBi5IqPfj4bD/HUTPwinn7MrEBtM2cZ3uksSeWk1x+Ks7A5sQnL7XzgUxnl070TiRZJSb0TYuzXM8ILt7gq0frgKSUKRXkeH+egxjBrMAGQ7vY0ebdBHlBHPHOeF9iiFoaujWdReBitbawHYORG8Ct8pvstiTdj98w7g7WB434/Eh0L0pi8Ydepj40/8OpA3nCES9cCIi0uaFlr+arIh3w6h5FsTqaLgh+MmbpNXnRR99/r/0zzKq3/9d1wnIbc7uHkoOSEkTlD5ceEf+IO85A4jsQFOXYJpGV8ns8z4xWLTsU+3GyWIIGDkkNR0CY8PjdkBeQJPEvZNPDnn+LK9C42Clkm1eQy4aqHaagJxFGYp/j79S7Lm4kLJZMHywKi628CsHZO/moPvkfUGrEO2KmqWHvnxWDh5PggV3TAJWOMk7p2ykuFRRb26MgMf9f8oTa+CSs2Jk5W7TF10xaYZDz7fCyUBdMK+JcguPcq0mFw9eoDf9i8FLOKF26VuK7Z14+fRTZN/YHU+u75ru6WDymRpm0ZhCBDdYy80gM45089Scp2bpnKIWg6s7bLdb9R/NRUhK1PZRDEzw3SkDZBVQ==" ++DOTENV_VAULT_PRODUCTION_VERSION=2 ++ ++#/----------------settings/metadata-----------------/ ++DOTENV_VAULT="vlt_57f67ae090fbd4c01066b1af1342a8ba518da1296c6595b9fcd233af37a5fce4" ++DOTENV_API_URL="https://vault.dotenv.org" ++DOTENV_CLI="npx dotenv-vault@latest" diff --git a/template-test/app_diff/.gitignore.diff b/template-test/app_diff/.gitignore.diff new file mode 100644 index 000000000..a7b447bf2 --- /dev/null +++ b/template-test/app_diff/.gitignore.diff @@ -0,0 +1,28 @@ +--- /Users/ilakovac/dev/open-saas/template-test/tools/../../template-test/base-app/app/.gitignore ++++ template-test/app/.gitignore +@@ -6,6 +6,24 @@ + .env + .env.* + ++# Dotenv Vault entries ++# These are automatically added by Dotenv Vault when running `npm run env:pull`. ++# They're kept in this diff to avoid having to manually revert .gitignore changes ++# each time we test modifications. They don't cause any harm and make the process ++# less annoying. ++.env* ++.flaskenv* ++!.env.project ++!.env.vault ++ + # Don't ignore example dotenv files. + !.env.example + !.env.*.example ++ ++# Ignore migrations dir to avoid including them in the diffs. We want to test ++# generating migrations each time. ++migrations/ ++ ++# Ignore package-lock.json to avoid including it in the diffs. Our users start ++# new projects without it, and we want to test the template like our users. ++package-lock.json +\ No newline at end of file diff --git a/template-test/app_diff/deletions b/template-test/app_diff/deletions new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/template-test/app_diff/deletions @@ -0,0 +1 @@ + diff --git a/template-test/app_diff/main.wasp.diff b/template-test/app_diff/main.wasp.diff new file mode 100644 index 000000000..20fc4b88b --- /dev/null +++ b/template-test/app_diff/main.wasp.diff @@ -0,0 +1,28 @@ +--- /Users/ilakovac/dev/open-saas/template-test/tools/../../template-test/base-app/app/main.wasp ++++ template-test/app/main.wasp +@@ -39,7 +39,7 @@ + email: { + fromField: { + name: "Open SaaS App", +- email: "me@example.com" ++ email: "opensaastemplate@mg.wasp.sh" + }, + emailVerification: { + clientRoute: EmailVerificationRoute, +@@ -84,14 +84,11 @@ + }, + + emailSender: { +- // NOTE: "Dummy" provider is just for local development purposes. +- // Make sure to check the server logs for the email confirmation url (it will not be sent to an address)! +- // Once you are ready for production, switch to e.g. "SendGrid" or "Mailgun" providers. Check out https://docs.opensaas.sh/guides/email-sending/ . +- provider: Dummy, ++ provider: SMTP, + defaultFrom: { + name: "Open SaaS App", + // When using a real provider, e.g. SendGrid, you must use the same email address that you configured your account to send out emails with! +- email: "me@example.com" ++ email: "opensaastemplate@mg.wasp.sh" + }, + }, + } diff --git a/template-test/app_diff/package.json.diff b/template-test/app_diff/package.json.diff new file mode 100644 index 000000000..a295c0d72 --- /dev/null +++ b/template-test/app_diff/package.json.diff @@ -0,0 +1,13 @@ +--- /Users/ilakovac/dev/open-saas/template-test/tools/../../template-test/base-app/app/package.json ++++ template-test/app/package.json +@@ -1,6 +1,10 @@ + { + "name": "opensaas", + "type": "module", ++ "scripts": { ++ "env:pull": "npx dotenv-vault@latest pull development .env.server", ++ "env:push": "npx dotenv-vault@latest push development .env.server" ++ }, + "dependencies": { + "@aws-sdk/client-s3": "^3.523.0", + "@aws-sdk/s3-presigned-post": "^3.750.0", diff --git a/template-test/tools/diff.sh b/template-test/tools/diff.sh new file mode 100755 index 000000000..9a903513d --- /dev/null +++ b/template-test/tools/diff.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +set -e + +command -v wasp >/dev/null || { echo "Error: Wasp CLI not found"; exit 1; } + +SCRIPT_DIR=$(dirname "$(realpath "$0")") +ROOT_DIR="${SCRIPT_DIR}/../.." +BASE_DIR="${ROOT_DIR}/template-test/base-app" + +# Clean up the temporary base app directory on exit. +trap 'rm -rf "${BASE_DIR}"' EXIT + +cd "${ROOT_DIR}" + +rm -rf "${BASE_DIR}" +(cd "${ROOT_DIR}/template-test" && wasp new -t saas base-app) +(cd "${BASE_DIR}/app" && git init -b main -q && git add .) + +rm -rf template-test/app_diff +"${ROOT_DIR}/tools/dope.sh" "${BASE_DIR}/app" template-test/app diff diff --git a/template-test/tools/patch.sh b/template-test/tools/patch.sh new file mode 100755 index 000000000..be0109e88 --- /dev/null +++ b/template-test/tools/patch.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +set -e + +command -v wasp >/dev/null || { echo "Error: Wasp CLI not found"; exit 1; } + +SCRIPT_DIR=$(dirname "$(realpath "$0")") +ROOT_DIR="${SCRIPT_DIR}/../.." +BASE_DIR="${ROOT_DIR}/template-test/base-app" + +# Clean up the temporary base app directory on exit. +trap 'rm -rf "${BASE_DIR}"' EXIT + +cd "${ROOT_DIR}" + +rm -rf "${BASE_DIR}" +(cd "${ROOT_DIR}/template-test" && wasp new -t saas base-app) +(cd "${BASE_DIR}/app" && git init -b main -q && git add .) + +# Clean up existing derived app directory if it exists. +rm -rf template-test/app + +"${ROOT_DIR}/tools/dope.sh" "${BASE_DIR}/app" template-test/app patch diff --git a/tools/README.md b/tools/README.md index 7e3e09caf..f5f0375b2 100644 --- a/tools/README.md +++ b/tools/README.md @@ -7,7 +7,7 @@ or to patch those diffs onto the base project to get the derived one. This is us project has only small changes on top of the base project and you want to keep it in a directory in the same repo as the main project. -Since derived apps (like `opensaas-sh`) are just the Open SaaS template with some small tweaks, +Since derived apps (like `opensaas-sh` and `template-test`) are just the Open SaaS template with some small tweaks, and we want to keep them up to date as the template changes, we don't version the actual app code in git. Instead, we version the diffs between it and the template in an `opensaas-sh/app_diff/` directory.