Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,3 +2,4 @@
testing-project
.mypy_cache
poetry.lock
dev-link/
2 changes: 1 addition & 1 deletion .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,4 +9,4 @@ services:
- docker

script:
- bash ./test.sh
- bash ./scripts/test.sh
83 changes: 83 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
# Contributing

Here are some short guidelines to guide you if you want to contribute to the development of the Full Stack FastAPI PostgreSQL project generator itself.

After you clone the project, there are several scripts that can help during development.

* `./scripts/dev-fsfp.sh`:

Generate a new default project `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp.sh
```

It will generate a new project with all the defaults at `~/code/dev-fsfp/`.

You can go to that directory with a full new project, edit files and test things, for example:

```console
$ cd ./dev-fsfp/

$ docker-compose up -d
```

It is outside of the project generator directory to let you add Git to it and compare versions and changes.

* `./scripts/dev-fsfp-back.sh`:

Move the changes from a project `dev-fsfp` back to the project generator.

You would call it after calling `./scripts/dev-fsfp.sh` and adding some modifications to `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp-back.sh
```

That will also contain all the generated files with the generated variables, but it will let you compare the changes in `dev-fsfp` and the source in the project generator with git, and see what to commit.

* `./scripts/discard-dev-files.sh`:

After using `./scripts/dev-fsfp-back.sh`, there will be a bunch of generated files with the variables for the generated project that you don't want to commit, like `README.md` and `.gitlab-ci.yml`.

To discard all those changes at once, run `discard-dev-files.sh` from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/dev-fsfp-back.sh
```

* `./scripts/test.sh`:

Run the tests. It creates a project `testing-project` *inside* of the project generator and runs its tests.

Call it from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/test.sh
```

* `./scripts/dev-link.sh`:

Set up a local directory with links to the files for live development with the source files.

This script generates a project `dev-link` *inside* the project generator, just to generate the `.env` and `./frontend/.env` files.

Then it removes everything except those 2 files.

Then it creates links for each of the source files, and adds those 2 files back.

The end result is that you can go into the `dev-link` directory and develop locally with it as if it was a generated project, with all the variables set. But all the changes are actually done directly in the source files.

This is probably a lot faster to iterate than using `./scripts/dev-fsfp.sh`. But it's tested only in Linux, it might not work in other systems.
8 changes: 4 additions & 4 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -117,12 +117,12 @@ The input variables, with their default values (some auto generated) are:
* `pgadmin_default_user_password`: PGAdmin default user password. Generate it with the method above.

* `traefik_constraint_tag`: The tag to be used by the internal Traefik load balancer (for example, to divide requests between backend and frontend) for production. Used to separate this stack from any other stack you might have. This should identify each stack in each environment (production, staging, etc).
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_public_constraint_tag`: The tag that should be used by stack services that should communicate with the public.

* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`root:changethis`".
* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`admin:changethis`".

* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. If you are not using it yet, you should, is open source. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.
* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. You can use the open source version or a free account. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.

* `docker_image_prefix`: Prefix to use for Docker image names. If you are using GitLab Docker registry it would be based on your code repository. E.g.: `git.example.com/development-team/my-awesome-project/`.
* `docker_image_backend`: Docker image name for the backend. By default, it will be based on your Docker image prefix, e.g.: `git.example.com/development-team/my-awesome-project/backend`. And depending on your environment, a different tag will be appended ( `prod`, `stag`, `branch` ). So, the final image names used will be like: `git.example.com/development-team/my-awesome-project/backend:prod`.
Expand All@@ -141,7 +141,7 @@ After using this generator, your new project (the directory created) will contai

## Sibling project generators

* Based on Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).
* Full Stack FastAPI Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).

## Release Notes

Expand Down
2 changes: 0 additions & 2 deletions dev-fsfp-config.yml

This file was deleted.

10 changes: 0 additions & 10 deletions dev-fsfp.sh

This file was deleted.

5 changes: 5 additions & 0 deletions dev-fsfp-back.sh → scripts/dev-fsfp-back.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,11 @@
# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to integrate a sibling dev-fsfp project with changes and review modifications"
exit 1
fi

if [ $(uname -s) = "Linux" ]; then
echo "Remove __pycache__ files"
sudo find ./dev-fsfp/ -type d -name __pycache__ -exec rm -r {} \+
Expand Down
13 changes: 13 additions & 0 deletions scripts/dev-fsfp.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to generate a sibling dev-fsfp project with independent git"
exit 1
fi

rm -rf ./dev-fsfp

cookiecutter --no-input -f ./full-stack-fastapi-postgresql project_name="Dev FSFP"
34 changes: 34 additions & 0 deletions scripts/dev-link.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

# Run this from the root of the project to generate a dev-link project
# It will contain a link to each of the files of the generator, except for
# .env and frontend/.env, that will be the generated ones
# This allows developing with a live stack while keeping the same source code
# Without having to generate dev-fsfp and integrating back all the files

rm -rf dev-link
mkdir -p tmp-dev-link/frontend

cookiecutter --no-input -f ./ project_name="Dev Link"

mv ./dev-link/.env ./tmp-dev-link/
mv ./dev-link/frontend/.env ./tmp-dev-link/frontend/

rm -rf ./dev-link/
mkdir -p ./dev-link/

cd ./dev-link/

for f in ../\{\{cookiecutter.project_slug\}\}/* ; do
ln -s "$f" ./
done

cd ..

mv ./tmp-dev-link/.env ./dev-link/
mv ./tmp-dev-link/frontend/.env ./dev-link/frontend/

rm -rf ./tmp-dev-link
6 changes: 4 additions & 2 deletions scripts/discard-dev-files.sh
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
#! /usr/bin/env bash

set -e

rm -rf \{\{cookiecutter.project_slug\}\}/.git
rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/poetry.lock
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/node_modules
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/dist
git checkout \{\{cookiecutter.project_slug\}\}/README.md
git checkout \{\{cookiecutter.project_slug\}\}/.gitlab-ci.yml
git checkout \{\{cookiecutter.project_slug\}\}/cookiecutter-config-file.yml
git checkout \{\{cookiecutter.project_slug\}\}/docker-compose.deploy.networks.yml
git checkout \{\{cookiecutter.project_slug\}\}/.env
git checkout \{\{cookiecutter.project_slug\}\}/frontend/.env

4 changes: 3 additions & 1 deletion test.sh → scripts/test.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,9 +3,11 @@
# Exit in case of error
set -e

# Run this from the root of the project

rm -rf ./testing-project

cookiecutter --config-file ./testing-config.yml --no-input -f ./
cookiecutter --no-input -f ./ project_name="Testing Project"

cd ./testing-project

Expand Down
2 changes: 0 additions & 2 deletions testing-config.yml

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,3 +2,4 @@
testing-project
.mypy_cache
poetry.lock
dev-link/
2 changes: 1 addition & 1 deletion .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,4 +9,4 @@ services:
- docker

script:
- bash ./test.sh
- bash ./scripts/test.sh
83 changes: 83 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
# Contributing

Here are some short guidelines to guide you if you want to contribute to the development of the Full Stack FastAPI PostgreSQL project generator itself.

After you clone the project, there are several scripts that can help during development.

* `./scripts/dev-fsfp.sh`:

Generate a new default project `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp.sh
```

It will generate a new project with all the defaults at `~/code/dev-fsfp/`.

You can go to that directory with a full new project, edit files and test things, for example:

```console
$ cd ./dev-fsfp/

$ docker-compose up -d
```

It is outside of the project generator directory to let you add Git to it and compare versions and changes.

* `./scripts/dev-fsfp-back.sh`:

Move the changes from a project `dev-fsfp` back to the project generator.

You would call it after calling `./scripts/dev-fsfp.sh` and adding some modifications to `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp-back.sh
```

That will also contain all the generated files with the generated variables, but it will let you compare the changes in `dev-fsfp` and the source in the project generator with git, and see what to commit.

* `./scripts/discard-dev-files.sh`:

After using `./scripts/dev-fsfp-back.sh`, there will be a bunch of generated files with the variables for the generated project that you don't want to commit, like `README.md` and `.gitlab-ci.yml`.

To discard all those changes at once, run `discard-dev-files.sh` from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/dev-fsfp-back.sh
```

* `./scripts/test.sh`:

Run the tests. It creates a project `testing-project` *inside* of the project generator and runs its tests.

Call it from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/test.sh
```

* `./scripts/dev-link.sh`:

Set up a local directory with links to the files for live development with the source files.

This script generates a project `dev-link` *inside* the project generator, just to generate the `.env` and `./frontend/.env` files.

Then it removes everything except those 2 files.

Then it creates links for each of the source files, and adds those 2 files back.

The end result is that you can go into the `dev-link` directory and develop locally with it as if it was a generated project, with all the variables set. But all the changes are actually done directly in the source files.

This is probably a lot faster to iterate than using `./scripts/dev-fsfp.sh`. But it's tested only in Linux, it might not work in other systems.
8 changes: 4 additions & 4 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -117,12 +117,12 @@ The input variables, with their default values (some auto generated) are:
* `pgadmin_default_user_password`: PGAdmin default user password. Generate it with the method above.

* `traefik_constraint_tag`: The tag to be used by the internal Traefik load balancer (for example, to divide requests between backend and frontend) for production. Used to separate this stack from any other stack you might have. This should identify each stack in each environment (production, staging, etc).
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_public_constraint_tag`: The tag that should be used by stack services that should communicate with the public.

* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`root:changethis`".
* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`admin:changethis`".

* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. If you are not using it yet, you should, is open source. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.
* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. You can use the open source version or a free account. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.

* `docker_image_prefix`: Prefix to use for Docker image names. If you are using GitLab Docker registry it would be based on your code repository. E.g.: `git.example.com/development-team/my-awesome-project/`.
* `docker_image_backend`: Docker image name for the backend. By default, it will be based on your Docker image prefix, e.g.: `git.example.com/development-team/my-awesome-project/backend`. And depending on your environment, a different tag will be appended ( `prod`, `stag`, `branch` ). So, the final image names used will be like: `git.example.com/development-team/my-awesome-project/backend:prod`.
Expand All@@ -141,7 +141,7 @@ After using this generator, your new project (the directory created) will contai

## Sibling project generators

* Based on Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).
* Full Stack FastAPI Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).

## Release Notes

Expand Down
2 changes: 0 additions & 2 deletions dev-fsfp-config.yml

This file was deleted.

10 changes: 0 additions & 10 deletions dev-fsfp.sh

This file was deleted.

5 changes: 5 additions & 0 deletions dev-fsfp-back.sh → scripts/dev-fsfp-back.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,11 @@
# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to integrate a sibling dev-fsfp project with changes and review modifications"
exit 1
fi

if [ $(uname -s) = "Linux" ]; then
echo "Remove __pycache__ files"
sudo find ./dev-fsfp/ -type d -name __pycache__ -exec rm -r {} \+
Expand Down
13 changes: 13 additions & 0 deletions scripts/dev-fsfp.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to generate a sibling dev-fsfp project with independent git"
exit 1
fi

rm -rf ./dev-fsfp

cookiecutter --no-input -f ./full-stack-fastapi-postgresql project_name="Dev FSFP"
34 changes: 34 additions & 0 deletions scripts/dev-link.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

# Run this from the root of the project to generate a dev-link project
# It will contain a link to each of the files of the generator, except for
# .env and frontend/.env, that will be the generated ones
# This allows developing with a live stack while keeping the same source code
# Without having to generate dev-fsfp and integrating back all the files

rm -rf dev-link
mkdir -p tmp-dev-link/frontend

cookiecutter --no-input -f ./ project_name="Dev Link"

mv ./dev-link/.env ./tmp-dev-link/
mv ./dev-link/frontend/.env ./tmp-dev-link/frontend/

rm -rf ./dev-link/
mkdir -p ./dev-link/

cd ./dev-link/

for f in ../\{\{cookiecutter.project_slug\}\}/* ; do
ln -s "$f" ./
done

cd ..

mv ./tmp-dev-link/.env ./dev-link/
mv ./tmp-dev-link/frontend/.env ./dev-link/frontend/

rm -rf ./tmp-dev-link
6 changes: 4 additions & 2 deletions scripts/discard-dev-files.sh
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
#! /usr/bin/env bash

set -e

rm -rf \{\{cookiecutter.project_slug\}\}/.git
rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/poetry.lock
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/node_modules
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/dist
git checkout \{\{cookiecutter.project_slug\}\}/README.md
git checkout \{\{cookiecutter.project_slug\}\}/.gitlab-ci.yml
git checkout \{\{cookiecutter.project_slug\}\}/cookiecutter-config-file.yml
git checkout \{\{cookiecutter.project_slug\}\}/docker-compose.deploy.networks.yml
git checkout \{\{cookiecutter.project_slug\}\}/.env
git checkout \{\{cookiecutter.project_slug\}\}/frontend/.env

4 changes: 3 additions & 1 deletion test.sh → scripts/test.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,9 +3,11 @@
# Exit in case of error
set -e

# Run this from the root of the project

rm -rf ./testing-project

cookiecutter --config-file ./testing-config.yml --no-input -f ./
cookiecutter --no-input -f ./ project_name="Testing Project"

cd ./testing-project

Expand Down
2 changes: 0 additions & 2 deletions testing-config.yml

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,3 +2,4 @@
testing-project
.mypy_cache
poetry.lock
dev-link/
2 changes: 1 addition & 1 deletion .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,4 +9,4 @@ services:
- docker

script:
- bash ./test.sh
- bash ./scripts/test.sh
83 changes: 83 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
# Contributing

Here are some short guidelines to guide you if you want to contribute to the development of the Full Stack FastAPI PostgreSQL project generator itself.

After you clone the project, there are several scripts that can help during development.

* `./scripts/dev-fsfp.sh`:

Generate a new default project `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp.sh
```

It will generate a new project with all the defaults at `~/code/dev-fsfp/`.

You can go to that directory with a full new project, edit files and test things, for example:

```console
$ cd ./dev-fsfp/

$ docker-compose up -d
```

It is outside of the project generator directory to let you add Git to it and compare versions and changes.

* `./scripts/dev-fsfp-back.sh`:

Move the changes from a project `dev-fsfp` back to the project generator.

You would call it after calling `./scripts/dev-fsfp.sh` and adding some modifications to `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp-back.sh
```

That will also contain all the generated files with the generated variables, but it will let you compare the changes in `dev-fsfp` and the source in the project generator with git, and see what to commit.

* `./scripts/discard-dev-files.sh`:

After using `./scripts/dev-fsfp-back.sh`, there will be a bunch of generated files with the variables for the generated project that you don't want to commit, like `README.md` and `.gitlab-ci.yml`.

To discard all those changes at once, run `discard-dev-files.sh` from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/dev-fsfp-back.sh
```

* `./scripts/test.sh`:

Run the tests. It creates a project `testing-project` *inside* of the project generator and runs its tests.

Call it from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/test.sh
```

* `./scripts/dev-link.sh`:

Set up a local directory with links to the files for live development with the source files.

This script generates a project `dev-link` *inside* the project generator, just to generate the `.env` and `./frontend/.env` files.

Then it removes everything except those 2 files.

Then it creates links for each of the source files, and adds those 2 files back.

The end result is that you can go into the `dev-link` directory and develop locally with it as if it was a generated project, with all the variables set. But all the changes are actually done directly in the source files.

This is probably a lot faster to iterate than using `./scripts/dev-fsfp.sh`. But it's tested only in Linux, it might not work in other systems.
8 changes: 4 additions & 4 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -117,12 +117,12 @@ The input variables, with their default values (some auto generated) are:
* `pgadmin_default_user_password`: PGAdmin default user password. Generate it with the method above.

* `traefik_constraint_tag`: The tag to be used by the internal Traefik load balancer (for example, to divide requests between backend and frontend) for production. Used to separate this stack from any other stack you might have. This should identify each stack in each environment (production, staging, etc).
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_public_constraint_tag`: The tag that should be used by stack services that should communicate with the public.

* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`root:changethis`".
* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`admin:changethis`".

* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. If you are not using it yet, you should, is open source. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.
* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. You can use the open source version or a free account. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.

* `docker_image_prefix`: Prefix to use for Docker image names. If you are using GitLab Docker registry it would be based on your code repository. E.g.: `git.example.com/development-team/my-awesome-project/`.
* `docker_image_backend`: Docker image name for the backend. By default, it will be based on your Docker image prefix, e.g.: `git.example.com/development-team/my-awesome-project/backend`. And depending on your environment, a different tag will be appended ( `prod`, `stag`, `branch` ). So, the final image names used will be like: `git.example.com/development-team/my-awesome-project/backend:prod`.
Expand All@@ -141,7 +141,7 @@ After using this generator, your new project (the directory created) will contai

## Sibling project generators

* Based on Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).
* Full Stack FastAPI Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).

## Release Notes

Expand Down
2 changes: 0 additions & 2 deletions dev-fsfp-config.yml

This file was deleted.

10 changes: 0 additions & 10 deletions dev-fsfp.sh

This file was deleted.

5 changes: 5 additions & 0 deletions dev-fsfp-back.sh → scripts/dev-fsfp-back.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,11 @@
# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to integrate a sibling dev-fsfp project with changes and review modifications"
exit 1
fi

if [ $(uname -s) = "Linux" ]; then
echo "Remove __pycache__ files"
sudo find ./dev-fsfp/ -type d -name __pycache__ -exec rm -r {} \+
Expand Down
13 changes: 13 additions & 0 deletions scripts/dev-fsfp.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to generate a sibling dev-fsfp project with independent git"
exit 1
fi

rm -rf ./dev-fsfp

cookiecutter --no-input -f ./full-stack-fastapi-postgresql project_name="Dev FSFP"
34 changes: 34 additions & 0 deletions scripts/dev-link.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

# Run this from the root of the project to generate a dev-link project
# It will contain a link to each of the files of the generator, except for
# .env and frontend/.env, that will be the generated ones
# This allows developing with a live stack while keeping the same source code
# Without having to generate dev-fsfp and integrating back all the files

rm -rf dev-link
mkdir -p tmp-dev-link/frontend

cookiecutter --no-input -f ./ project_name="Dev Link"

mv ./dev-link/.env ./tmp-dev-link/
mv ./dev-link/frontend/.env ./tmp-dev-link/frontend/

rm -rf ./dev-link/
mkdir -p ./dev-link/

cd ./dev-link/

for f in ../\{\{cookiecutter.project_slug\}\}/* ; do
ln -s "$f" ./
done

cd ..

mv ./tmp-dev-link/.env ./dev-link/
mv ./tmp-dev-link/frontend/.env ./dev-link/frontend/

rm -rf ./tmp-dev-link
6 changes: 4 additions & 2 deletions scripts/discard-dev-files.sh
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
#! /usr/bin/env bash

set -e

rm -rf \{\{cookiecutter.project_slug\}\}/.git
rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/poetry.lock
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/node_modules
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/dist
git checkout \{\{cookiecutter.project_slug\}\}/README.md
git checkout \{\{cookiecutter.project_slug\}\}/.gitlab-ci.yml
git checkout \{\{cookiecutter.project_slug\}\}/cookiecutter-config-file.yml
git checkout \{\{cookiecutter.project_slug\}\}/docker-compose.deploy.networks.yml
git checkout \{\{cookiecutter.project_slug\}\}/.env
git checkout \{\{cookiecutter.project_slug\}\}/frontend/.env

4 changes: 3 additions & 1 deletion test.sh → scripts/test.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,9 +3,11 @@
# Exit in case of error
set -e

# Run this from the root of the project

rm -rf ./testing-project

cookiecutter --config-file ./testing-config.yml --no-input -f ./
cookiecutter --no-input -f ./ project_name="Testing Project"

cd ./testing-project

Expand Down
2 changes: 0 additions & 2 deletions testing-config.yml

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,3 +2,4 @@
testing-project
.mypy_cache
poetry.lock
dev-link/
2 changes: 1 addition & 1 deletion .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,4 +9,4 @@ services:
- docker

script:
- bash ./test.sh
- bash ./scripts/test.sh
83 changes: 83 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
# Contributing

Here are some short guidelines to guide you if you want to contribute to the development of the Full Stack FastAPI PostgreSQL project generator itself.

After you clone the project, there are several scripts that can help during development.

* `./scripts/dev-fsfp.sh`:

Generate a new default project `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp.sh
```

It will generate a new project with all the defaults at `~/code/dev-fsfp/`.

You can go to that directory with a full new project, edit files and test things, for example:

```console
$ cd ./dev-fsfp/

$ docker-compose up -d
```

It is outside of the project generator directory to let you add Git to it and compare versions and changes.

* `./scripts/dev-fsfp-back.sh`:

Move the changes from a project `dev-fsfp` back to the project generator.

You would call it after calling `./scripts/dev-fsfp.sh` and adding some modifications to `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp-back.sh
```

That will also contain all the generated files with the generated variables, but it will let you compare the changes in `dev-fsfp` and the source in the project generator with git, and see what to commit.

* `./scripts/discard-dev-files.sh`:

After using `./scripts/dev-fsfp-back.sh`, there will be a bunch of generated files with the variables for the generated project that you don't want to commit, like `README.md` and `.gitlab-ci.yml`.

To discard all those changes at once, run `discard-dev-files.sh` from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/dev-fsfp-back.sh
```

* `./scripts/test.sh`:

Run the tests. It creates a project `testing-project` *inside* of the project generator and runs its tests.

Call it from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/test.sh
```

* `./scripts/dev-link.sh`:

Set up a local directory with links to the files for live development with the source files.

This script generates a project `dev-link` *inside* the project generator, just to generate the `.env` and `./frontend/.env` files.

Then it removes everything except those 2 files.

Then it creates links for each of the source files, and adds those 2 files back.

The end result is that you can go into the `dev-link` directory and develop locally with it as if it was a generated project, with all the variables set. But all the changes are actually done directly in the source files.

This is probably a lot faster to iterate than using `./scripts/dev-fsfp.sh`. But it's tested only in Linux, it might not work in other systems.
8 changes: 4 additions & 4 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -117,12 +117,12 @@ The input variables, with their default values (some auto generated) are:
* `pgadmin_default_user_password`: PGAdmin default user password. Generate it with the method above.

* `traefik_constraint_tag`: The tag to be used by the internal Traefik load balancer (for example, to divide requests between backend and frontend) for production. Used to separate this stack from any other stack you might have. This should identify each stack in each environment (production, staging, etc).
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_public_constraint_tag`: The tag that should be used by stack services that should communicate with the public.

* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`root:changethis`".
* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`admin:changethis`".

* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. If you are not using it yet, you should, is open source. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.
* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. You can use the open source version or a free account. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.

* `docker_image_prefix`: Prefix to use for Docker image names. If you are using GitLab Docker registry it would be based on your code repository. E.g.: `git.example.com/development-team/my-awesome-project/`.
* `docker_image_backend`: Docker image name for the backend. By default, it will be based on your Docker image prefix, e.g.: `git.example.com/development-team/my-awesome-project/backend`. And depending on your environment, a different tag will be appended ( `prod`, `stag`, `branch` ). So, the final image names used will be like: `git.example.com/development-team/my-awesome-project/backend:prod`.
Expand All@@ -141,7 +141,7 @@ After using this generator, your new project (the directory created) will contai

## Sibling project generators

* Based on Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).
* Full Stack FastAPI Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).

## Release Notes

Expand Down
2 changes: 0 additions & 2 deletions dev-fsfp-config.yml

This file was deleted.

10 changes: 0 additions & 10 deletions dev-fsfp.sh

This file was deleted.

5 changes: 5 additions & 0 deletions dev-fsfp-back.sh → scripts/dev-fsfp-back.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,11 @@
# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to integrate a sibling dev-fsfp project with changes and review modifications"
exit 1
fi

if [ $(uname -s) = "Linux" ]; then
echo "Remove __pycache__ files"
sudo find ./dev-fsfp/ -type d -name __pycache__ -exec rm -r {} \+
Expand Down
13 changes: 13 additions & 0 deletions scripts/dev-fsfp.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to generate a sibling dev-fsfp project with independent git"
exit 1
fi

rm -rf ./dev-fsfp

cookiecutter --no-input -f ./full-stack-fastapi-postgresql project_name="Dev FSFP"
34 changes: 34 additions & 0 deletions scripts/dev-link.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

# Run this from the root of the project to generate a dev-link project
# It will contain a link to each of the files of the generator, except for
# .env and frontend/.env, that will be the generated ones
# This allows developing with a live stack while keeping the same source code
# Without having to generate dev-fsfp and integrating back all the files

rm -rf dev-link
mkdir -p tmp-dev-link/frontend

cookiecutter --no-input -f ./ project_name="Dev Link"

mv ./dev-link/.env ./tmp-dev-link/
mv ./dev-link/frontend/.env ./tmp-dev-link/frontend/

rm -rf ./dev-link/
mkdir -p ./dev-link/

cd ./dev-link/

for f in ../\{\{cookiecutter.project_slug\}\}/* ; do
ln -s "$f" ./
done

cd ..

mv ./tmp-dev-link/.env ./dev-link/
mv ./tmp-dev-link/frontend/.env ./dev-link/frontend/

rm -rf ./tmp-dev-link
6 changes: 4 additions & 2 deletions scripts/discard-dev-files.sh
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
#! /usr/bin/env bash

set -e

rm -rf \{\{cookiecutter.project_slug\}\}/.git
rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/poetry.lock
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/node_modules
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/dist
git checkout \{\{cookiecutter.project_slug\}\}/README.md
git checkout \{\{cookiecutter.project_slug\}\}/.gitlab-ci.yml
git checkout \{\{cookiecutter.project_slug\}\}/cookiecutter-config-file.yml
git checkout \{\{cookiecutter.project_slug\}\}/docker-compose.deploy.networks.yml
git checkout \{\{cookiecutter.project_slug\}\}/.env
git checkout \{\{cookiecutter.project_slug\}\}/frontend/.env

4 changes: 3 additions & 1 deletion test.sh → scripts/test.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,9 +3,11 @@
# Exit in case of error
set -e

# Run this from the root of the project

rm -rf ./testing-project

cookiecutter --config-file ./testing-config.yml --no-input -f ./
cookiecutter --no-input -f ./ project_name="Testing Project"

cd ./testing-project

Expand Down
2 changes: 0 additions & 2 deletions testing-config.yml

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,3 +2,4 @@
testing-project
.mypy_cache
poetry.lock
dev-link/
2 changes: 1 addition & 1 deletion .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,4 +9,4 @@ services:
- docker

script:
- bash ./test.sh
- bash ./scripts/test.sh
83 changes: 83 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
# Contributing

Here are some short guidelines to guide you if you want to contribute to the development of the Full Stack FastAPI PostgreSQL project generator itself.

After you clone the project, there are several scripts that can help during development.

* `./scripts/dev-fsfp.sh`:

Generate a new default project `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp.sh
```

It will generate a new project with all the defaults at `~/code/dev-fsfp/`.

You can go to that directory with a full new project, edit files and test things, for example:

```console
$ cd ./dev-fsfp/

$ docker-compose up -d
```

It is outside of the project generator directory to let you add Git to it and compare versions and changes.

* `./scripts/dev-fsfp-back.sh`:

Move the changes from a project `dev-fsfp` back to the project generator.

You would call it after calling `./scripts/dev-fsfp.sh` and adding some modifications to `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp-back.sh
```

That will also contain all the generated files with the generated variables, but it will let you compare the changes in `dev-fsfp` and the source in the project generator with git, and see what to commit.

* `./scripts/discard-dev-files.sh`:

After using `./scripts/dev-fsfp-back.sh`, there will be a bunch of generated files with the variables for the generated project that you don't want to commit, like `README.md` and `.gitlab-ci.yml`.

To discard all those changes at once, run `discard-dev-files.sh` from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/dev-fsfp-back.sh
```

* `./scripts/test.sh`:

Run the tests. It creates a project `testing-project` *inside* of the project generator and runs its tests.

Call it from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/test.sh
```

* `./scripts/dev-link.sh`:

Set up a local directory with links to the files for live development with the source files.

This script generates a project `dev-link` *inside* the project generator, just to generate the `.env` and `./frontend/.env` files.

Then it removes everything except those 2 files.

Then it creates links for each of the source files, and adds those 2 files back.

The end result is that you can go into the `dev-link` directory and develop locally with it as if it was a generated project, with all the variables set. But all the changes are actually done directly in the source files.

This is probably a lot faster to iterate than using `./scripts/dev-fsfp.sh`. But it's tested only in Linux, it might not work in other systems.
8 changes: 4 additions & 4 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -117,12 +117,12 @@ The input variables, with their default values (some auto generated) are:
* `pgadmin_default_user_password`: PGAdmin default user password. Generate it with the method above.

* `traefik_constraint_tag`: The tag to be used by the internal Traefik load balancer (for example, to divide requests between backend and frontend) for production. Used to separate this stack from any other stack you might have. This should identify each stack in each environment (production, staging, etc).
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_public_constraint_tag`: The tag that should be used by stack services that should communicate with the public.

* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`root:changethis`".
* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`admin:changethis`".

* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. If you are not using it yet, you should, is open source. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.
* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. You can use the open source version or a free account. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.

* `docker_image_prefix`: Prefix to use for Docker image names. If you are using GitLab Docker registry it would be based on your code repository. E.g.: `git.example.com/development-team/my-awesome-project/`.
* `docker_image_backend`: Docker image name for the backend. By default, it will be based on your Docker image prefix, e.g.: `git.example.com/development-team/my-awesome-project/backend`. And depending on your environment, a different tag will be appended ( `prod`, `stag`, `branch` ). So, the final image names used will be like: `git.example.com/development-team/my-awesome-project/backend:prod`.
Expand All@@ -141,7 +141,7 @@ After using this generator, your new project (the directory created) will contai

## Sibling project generators

* Based on Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).
* Full Stack FastAPI Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).

## Release Notes

Expand Down
2 changes: 0 additions & 2 deletions dev-fsfp-config.yml

This file was deleted.

10 changes: 0 additions & 10 deletions dev-fsfp.sh

This file was deleted.

5 changes: 5 additions & 0 deletions dev-fsfp-back.sh → scripts/dev-fsfp-back.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,11 @@
# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to integrate a sibling dev-fsfp project with changes and review modifications"
exit 1
fi

if [ $(uname -s) = "Linux" ]; then
echo "Remove __pycache__ files"
sudo find ./dev-fsfp/ -type d -name __pycache__ -exec rm -r {} \+
Expand Down
13 changes: 13 additions & 0 deletions scripts/dev-fsfp.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to generate a sibling dev-fsfp project with independent git"
exit 1
fi

rm -rf ./dev-fsfp

cookiecutter --no-input -f ./full-stack-fastapi-postgresql project_name="Dev FSFP"
34 changes: 34 additions & 0 deletions scripts/dev-link.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

# Run this from the root of the project to generate a dev-link project
# It will contain a link to each of the files of the generator, except for
# .env and frontend/.env, that will be the generated ones
# This allows developing with a live stack while keeping the same source code
# Without having to generate dev-fsfp and integrating back all the files

rm -rf dev-link
mkdir -p tmp-dev-link/frontend

cookiecutter --no-input -f ./ project_name="Dev Link"

mv ./dev-link/.env ./tmp-dev-link/
mv ./dev-link/frontend/.env ./tmp-dev-link/frontend/

rm -rf ./dev-link/
mkdir -p ./dev-link/

cd ./dev-link/

for f in ../\{\{cookiecutter.project_slug\}\}/* ; do
ln -s "$f" ./
done

cd ..

mv ./tmp-dev-link/.env ./dev-link/
mv ./tmp-dev-link/frontend/.env ./dev-link/frontend/

rm -rf ./tmp-dev-link
6 changes: 4 additions & 2 deletions scripts/discard-dev-files.sh
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
#! /usr/bin/env bash

set -e

rm -rf \{\{cookiecutter.project_slug\}\}/.git
rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/poetry.lock
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/node_modules
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/dist
git checkout \{\{cookiecutter.project_slug\}\}/README.md
git checkout \{\{cookiecutter.project_slug\}\}/.gitlab-ci.yml
git checkout \{\{cookiecutter.project_slug\}\}/cookiecutter-config-file.yml
git checkout \{\{cookiecutter.project_slug\}\}/docker-compose.deploy.networks.yml
git checkout \{\{cookiecutter.project_slug\}\}/.env
git checkout \{\{cookiecutter.project_slug\}\}/frontend/.env

4 changes: 3 additions & 1 deletion test.sh → scripts/test.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,9 +3,11 @@
# Exit in case of error
set -e

# Run this from the root of the project

rm -rf ./testing-project

cookiecutter --config-file ./testing-config.yml --no-input -f ./
cookiecutter --no-input -f ./ project_name="Testing Project"

cd ./testing-project

Expand Down
2 changes: 0 additions & 2 deletions testing-config.yml

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,3 +2,4 @@
testing-project
.mypy_cache
poetry.lock
dev-link/
2 changes: 1 addition & 1 deletion .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,4 +9,4 @@ services:
- docker

script:
- bash ./test.sh
- bash ./scripts/test.sh
83 changes: 83 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
# Contributing

Here are some short guidelines to guide you if you want to contribute to the development of the Full Stack FastAPI PostgreSQL project generator itself.

After you clone the project, there are several scripts that can help during development.

* `./scripts/dev-fsfp.sh`:

Generate a new default project `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp.sh
```

It will generate a new project with all the defaults at `~/code/dev-fsfp/`.

You can go to that directory with a full new project, edit files and test things, for example:

```console
$ cd ./dev-fsfp/

$ docker-compose up -d
```

It is outside of the project generator directory to let you add Git to it and compare versions and changes.

* `./scripts/dev-fsfp-back.sh`:

Move the changes from a project `dev-fsfp` back to the project generator.

You would call it after calling `./scripts/dev-fsfp.sh` and adding some modifications to `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp-back.sh
```

That will also contain all the generated files with the generated variables, but it will let you compare the changes in `dev-fsfp` and the source in the project generator with git, and see what to commit.

* `./scripts/discard-dev-files.sh`:

After using `./scripts/dev-fsfp-back.sh`, there will be a bunch of generated files with the variables for the generated project that you don't want to commit, like `README.md` and `.gitlab-ci.yml`.

To discard all those changes at once, run `discard-dev-files.sh` from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/dev-fsfp-back.sh
```

* `./scripts/test.sh`:

Run the tests. It creates a project `testing-project` *inside* of the project generator and runs its tests.

Call it from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/test.sh
```

* `./scripts/dev-link.sh`:

Set up a local directory with links to the files for live development with the source files.

This script generates a project `dev-link` *inside* the project generator, just to generate the `.env` and `./frontend/.env` files.

Then it removes everything except those 2 files.

Then it creates links for each of the source files, and adds those 2 files back.

The end result is that you can go into the `dev-link` directory and develop locally with it as if it was a generated project, with all the variables set. But all the changes are actually done directly in the source files.

This is probably a lot faster to iterate than using `./scripts/dev-fsfp.sh`. But it's tested only in Linux, it might not work in other systems.
8 changes: 4 additions & 4 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -117,12 +117,12 @@ The input variables, with their default values (some auto generated) are:
* `pgadmin_default_user_password`: PGAdmin default user password. Generate it with the method above.

* `traefik_constraint_tag`: The tag to be used by the internal Traefik load balancer (for example, to divide requests between backend and frontend) for production. Used to separate this stack from any other stack you might have. This should identify each stack in each environment (production, staging, etc).
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_public_constraint_tag`: The tag that should be used by stack services that should communicate with the public.

* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`root:changethis`".
* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`admin:changethis`".

* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. If you are not using it yet, you should, is open source. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.
* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. You can use the open source version or a free account. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.

* `docker_image_prefix`: Prefix to use for Docker image names. If you are using GitLab Docker registry it would be based on your code repository. E.g.: `git.example.com/development-team/my-awesome-project/`.
* `docker_image_backend`: Docker image name for the backend. By default, it will be based on your Docker image prefix, e.g.: `git.example.com/development-team/my-awesome-project/backend`. And depending on your environment, a different tag will be appended ( `prod`, `stag`, `branch` ). So, the final image names used will be like: `git.example.com/development-team/my-awesome-project/backend:prod`.
Expand All@@ -141,7 +141,7 @@ After using this generator, your new project (the directory created) will contai

## Sibling project generators

* Based on Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).
* Full Stack FastAPI Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).

## Release Notes

Expand Down
2 changes: 0 additions & 2 deletions dev-fsfp-config.yml

This file was deleted.

10 changes: 0 additions & 10 deletions dev-fsfp.sh

This file was deleted.

5 changes: 5 additions & 0 deletions dev-fsfp-back.sh → scripts/dev-fsfp-back.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,11 @@
# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to integrate a sibling dev-fsfp project with changes and review modifications"
exit 1
fi

if [ $(uname -s) = "Linux" ]; then
echo "Remove __pycache__ files"
sudo find ./dev-fsfp/ -type d -name __pycache__ -exec rm -r {} \+
Expand Down
13 changes: 13 additions & 0 deletions scripts/dev-fsfp.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to generate a sibling dev-fsfp project with independent git"
exit 1
fi

rm -rf ./dev-fsfp

cookiecutter --no-input -f ./full-stack-fastapi-postgresql project_name="Dev FSFP"
34 changes: 34 additions & 0 deletions scripts/dev-link.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

# Run this from the root of the project to generate a dev-link project
# It will contain a link to each of the files of the generator, except for
# .env and frontend/.env, that will be the generated ones
# This allows developing with a live stack while keeping the same source code
# Without having to generate dev-fsfp and integrating back all the files

rm -rf dev-link
mkdir -p tmp-dev-link/frontend

cookiecutter --no-input -f ./ project_name="Dev Link"

mv ./dev-link/.env ./tmp-dev-link/
mv ./dev-link/frontend/.env ./tmp-dev-link/frontend/

rm -rf ./dev-link/
mkdir -p ./dev-link/

cd ./dev-link/

for f in ../\{\{cookiecutter.project_slug\}\}/* ; do
ln -s "$f" ./
done

cd ..

mv ./tmp-dev-link/.env ./dev-link/
mv ./tmp-dev-link/frontend/.env ./dev-link/frontend/

rm -rf ./tmp-dev-link
6 changes: 4 additions & 2 deletions scripts/discard-dev-files.sh
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
#! /usr/bin/env bash

set -e

rm -rf \{\{cookiecutter.project_slug\}\}/.git
rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/poetry.lock
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/node_modules
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/dist
git checkout \{\{cookiecutter.project_slug\}\}/README.md
git checkout \{\{cookiecutter.project_slug\}\}/.gitlab-ci.yml
git checkout \{\{cookiecutter.project_slug\}\}/cookiecutter-config-file.yml
git checkout \{\{cookiecutter.project_slug\}\}/docker-compose.deploy.networks.yml
git checkout \{\{cookiecutter.project_slug\}\}/.env
git checkout \{\{cookiecutter.project_slug\}\}/frontend/.env

4 changes: 3 additions & 1 deletion test.sh → scripts/test.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,9 +3,11 @@
# Exit in case of error
set -e

# Run this from the root of the project

rm -rf ./testing-project

cookiecutter --config-file ./testing-config.yml --no-input -f ./
cookiecutter --no-input -f ./ project_name="Testing Project"

cd ./testing-project

Expand Down
2 changes: 0 additions & 2 deletions testing-config.yml

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,3 +2,4 @@
testing-project
.mypy_cache
poetry.lock
dev-link/
2 changes: 1 addition & 1 deletion .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,4 +9,4 @@ services:
- docker

script:
- bash ./test.sh
- bash ./scripts/test.sh
83 changes: 83 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
# Contributing

Here are some short guidelines to guide you if you want to contribute to the development of the Full Stack FastAPI PostgreSQL project generator itself.

After you clone the project, there are several scripts that can help during development.

* `./scripts/dev-fsfp.sh`:

Generate a new default project `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp.sh
```

It will generate a new project with all the defaults at `~/code/dev-fsfp/`.

You can go to that directory with a full new project, edit files and test things, for example:

```console
$ cd ./dev-fsfp/

$ docker-compose up -d
```

It is outside of the project generator directory to let you add Git to it and compare versions and changes.

* `./scripts/dev-fsfp-back.sh`:

Move the changes from a project `dev-fsfp` back to the project generator.

You would call it after calling `./scripts/dev-fsfp.sh` and adding some modifications to `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp-back.sh
```

That will also contain all the generated files with the generated variables, but it will let you compare the changes in `dev-fsfp` and the source in the project generator with git, and see what to commit.

* `./scripts/discard-dev-files.sh`:

After using `./scripts/dev-fsfp-back.sh`, there will be a bunch of generated files with the variables for the generated project that you don't want to commit, like `README.md` and `.gitlab-ci.yml`.

To discard all those changes at once, run `discard-dev-files.sh` from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/dev-fsfp-back.sh
```

* `./scripts/test.sh`:

Run the tests. It creates a project `testing-project` *inside* of the project generator and runs its tests.

Call it from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/test.sh
```

* `./scripts/dev-link.sh`:

Set up a local directory with links to the files for live development with the source files.

This script generates a project `dev-link` *inside* the project generator, just to generate the `.env` and `./frontend/.env` files.

Then it removes everything except those 2 files.

Then it creates links for each of the source files, and adds those 2 files back.

The end result is that you can go into the `dev-link` directory and develop locally with it as if it was a generated project, with all the variables set. But all the changes are actually done directly in the source files.

This is probably a lot faster to iterate than using `./scripts/dev-fsfp.sh`. But it's tested only in Linux, it might not work in other systems.
8 changes: 4 additions & 4 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -117,12 +117,12 @@ The input variables, with their default values (some auto generated) are:
* `pgadmin_default_user_password`: PGAdmin default user password. Generate it with the method above.

* `traefik_constraint_tag`: The tag to be used by the internal Traefik load balancer (for example, to divide requests between backend and frontend) for production. Used to separate this stack from any other stack you might have. This should identify each stack in each environment (production, staging, etc).
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_public_constraint_tag`: The tag that should be used by stack services that should communicate with the public.

* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`root:changethis`".
* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`admin:changethis`".

* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. If you are not using it yet, you should, is open source. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.
* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. You can use the open source version or a free account. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.

* `docker_image_prefix`: Prefix to use for Docker image names. If you are using GitLab Docker registry it would be based on your code repository. E.g.: `git.example.com/development-team/my-awesome-project/`.
* `docker_image_backend`: Docker image name for the backend. By default, it will be based on your Docker image prefix, e.g.: `git.example.com/development-team/my-awesome-project/backend`. And depending on your environment, a different tag will be appended ( `prod`, `stag`, `branch` ). So, the final image names used will be like: `git.example.com/development-team/my-awesome-project/backend:prod`.
Expand All@@ -141,7 +141,7 @@ After using this generator, your new project (the directory created) will contai

## Sibling project generators

* Based on Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).
* Full Stack FastAPI Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).

## Release Notes

Expand Down
2 changes: 0 additions & 2 deletions dev-fsfp-config.yml

This file was deleted.

10 changes: 0 additions & 10 deletions dev-fsfp.sh

This file was deleted.

5 changes: 5 additions & 0 deletions dev-fsfp-back.sh → scripts/dev-fsfp-back.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,11 @@
# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to integrate a sibling dev-fsfp project with changes and review modifications"
exit 1
fi

if [ $(uname -s) = "Linux" ]; then
echo "Remove __pycache__ files"
sudo find ./dev-fsfp/ -type d -name __pycache__ -exec rm -r {} \+
Expand Down
13 changes: 13 additions & 0 deletions scripts/dev-fsfp.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to generate a sibling dev-fsfp project with independent git"
exit 1
fi

rm -rf ./dev-fsfp

cookiecutter --no-input -f ./full-stack-fastapi-postgresql project_name="Dev FSFP"
34 changes: 34 additions & 0 deletions scripts/dev-link.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

# Run this from the root of the project to generate a dev-link project
# It will contain a link to each of the files of the generator, except for
# .env and frontend/.env, that will be the generated ones
# This allows developing with a live stack while keeping the same source code
# Without having to generate dev-fsfp and integrating back all the files

rm -rf dev-link
mkdir -p tmp-dev-link/frontend

cookiecutter --no-input -f ./ project_name="Dev Link"

mv ./dev-link/.env ./tmp-dev-link/
mv ./dev-link/frontend/.env ./tmp-dev-link/frontend/

rm -rf ./dev-link/
mkdir -p ./dev-link/

cd ./dev-link/

for f in ../\{\{cookiecutter.project_slug\}\}/* ; do
ln -s "$f" ./
done

cd ..

mv ./tmp-dev-link/.env ./dev-link/
mv ./tmp-dev-link/frontend/.env ./dev-link/frontend/

rm -rf ./tmp-dev-link
6 changes: 4 additions & 2 deletions scripts/discard-dev-files.sh
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
#! /usr/bin/env bash

set -e

rm -rf \{\{cookiecutter.project_slug\}\}/.git
rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/poetry.lock
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/node_modules
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/dist
git checkout \{\{cookiecutter.project_slug\}\}/README.md
git checkout \{\{cookiecutter.project_slug\}\}/.gitlab-ci.yml
git checkout \{\{cookiecutter.project_slug\}\}/cookiecutter-config-file.yml
git checkout \{\{cookiecutter.project_slug\}\}/docker-compose.deploy.networks.yml
git checkout \{\{cookiecutter.project_slug\}\}/.env
git checkout \{\{cookiecutter.project_slug\}\}/frontend/.env

4 changes: 3 additions & 1 deletion test.sh → scripts/test.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,9 +3,11 @@
# Exit in case of error
set -e

# Run this from the root of the project

rm -rf ./testing-project

cookiecutter --config-file ./testing-config.yml --no-input -f ./
cookiecutter --no-input -f ./ project_name="Testing Project"

cd ./testing-project

Expand Down
2 changes: 0 additions & 2 deletions testing-config.yml

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,3 +2,4 @@
testing-project
.mypy_cache
poetry.lock
dev-link/
2 changes: 1 addition & 1 deletion .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,4 +9,4 @@ services:
- docker

script:
- bash ./test.sh
- bash ./scripts/test.sh
83 changes: 83 additions & 0 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
# Contributing

Here are some short guidelines to guide you if you want to contribute to the development of the Full Stack FastAPI PostgreSQL project generator itself.

After you clone the project, there are several scripts that can help during development.

* `./scripts/dev-fsfp.sh`:

Generate a new default project `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp.sh
```

It will generate a new project with all the defaults at `~/code/dev-fsfp/`.

You can go to that directory with a full new project, edit files and test things, for example:

```console
$ cd ./dev-fsfp/

$ docker-compose up -d
```

It is outside of the project generator directory to let you add Git to it and compare versions and changes.

* `./scripts/dev-fsfp-back.sh`:

Move the changes from a project `dev-fsfp` back to the project generator.

You would call it after calling `./scripts/dev-fsfp.sh` and adding some modifications to `dev-fsfp`.

Call it from one level above the project directory. So, if the project is at `~/code/full-stack-fastapi-postgresql/`, call it from `~/code/`, like:

```console
$ cd ~/code/

$ bash ./full-stack-fastapi-postgresql/scripts/dev-fsfp-back.sh
```

That will also contain all the generated files with the generated variables, but it will let you compare the changes in `dev-fsfp` and the source in the project generator with git, and see what to commit.

* `./scripts/discard-dev-files.sh`:

After using `./scripts/dev-fsfp-back.sh`, there will be a bunch of generated files with the variables for the generated project that you don't want to commit, like `README.md` and `.gitlab-ci.yml`.

To discard all those changes at once, run `discard-dev-files.sh` from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/dev-fsfp-back.sh
```

* `./scripts/test.sh`:

Run the tests. It creates a project `testing-project` *inside* of the project generator and runs its tests.

Call it from the root of the project, e.g.:

```console
$ cd ~/code/full-stack-fastapi-postgresql/

$ bash ./scripts/test.sh
```

* `./scripts/dev-link.sh`:

Set up a local directory with links to the files for live development with the source files.

This script generates a project `dev-link` *inside* the project generator, just to generate the `.env` and `./frontend/.env` files.

Then it removes everything except those 2 files.

Then it creates links for each of the source files, and adds those 2 files back.

The end result is that you can go into the `dev-link` directory and develop locally with it as if it was a generated project, with all the variables set. But all the changes are actually done directly in the source files.

This is probably a lot faster to iterate than using `./scripts/dev-fsfp.sh`. But it's tested only in Linux, it might not work in other systems.
8 changes: 4 additions & 4 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -117,12 +117,12 @@ The input variables, with their default values (some auto generated) are:
* `pgadmin_default_user_password`: PGAdmin default user password. Generate it with the method above.

* `traefik_constraint_tag`: The tag to be used by the internal Traefik load balancer (for example, to divide requests between backend and frontend) for production. Used to separate this stack from any other stack you might have. This should identify each stack in each environment (production, staging, etc).
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_constraint_tag_staging`: The Traefik tag to be used while on staging.
* `traefik_public_constraint_tag`: The tag that should be used by stack services that should communicate with the public.

* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`root:changethis`".
* `flower_auth`: Basic HTTP authentication for flower, in the form`user:password`. By default: "`admin:changethis`".

* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. If you are not using it yet, you should, is open source. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.
* `sentry_dsn`: Key URL (DSN) of Sentry, for live error reporting. You can use the open source version or a free account. E.g.: `https://1234abcd:5678ef@sentry.example.com/30`.

* `docker_image_prefix`: Prefix to use for Docker image names. If you are using GitLab Docker registry it would be based on your code repository. E.g.: `git.example.com/development-team/my-awesome-project/`.
* `docker_image_backend`: Docker image name for the backend. By default, it will be based on your Docker image prefix, e.g.: `git.example.com/development-team/my-awesome-project/backend`. And depending on your environment, a different tag will be appended ( `prod`, `stag`, `branch` ). So, the final image names used will be like: `git.example.com/development-team/my-awesome-project/backend:prod`.
Expand All@@ -141,7 +141,7 @@ After using this generator, your new project (the directory created) will contai

## Sibling project generators

* Based on Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).
* Full Stack FastAPI Couchbase: [https://github.com/tiangolo/full-stack-fastapi-couchbase](https://github.com/tiangolo/full-stack-fastapi-couchbase).

## Release Notes

Expand Down
2 changes: 0 additions & 2 deletions dev-fsfp-config.yml

This file was deleted.

10 changes: 0 additions & 10 deletions dev-fsfp.sh

This file was deleted.

5 changes: 5 additions & 0 deletions dev-fsfp-back.sh → scripts/dev-fsfp-back.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,11 @@
# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to integrate a sibling dev-fsfp project with changes and review modifications"
exit 1
fi

if [ $(uname -s) = "Linux" ]; then
echo "Remove __pycache__ files"
sudo find ./dev-fsfp/ -type d -name __pycache__ -exec rm -r {} \+
Expand Down
13 changes: 13 additions & 0 deletions scripts/dev-fsfp.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

if [ ! -d ./full-stack-fastapi-postgresql ] ; then
echo "Run this script from outside the project, to generate a sibling dev-fsfp project with independent git"
exit 1
fi

rm -rf ./dev-fsfp

cookiecutter --no-input -f ./full-stack-fastapi-postgresql project_name="Dev FSFP"
34 changes: 34 additions & 0 deletions scripts/dev-link.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
#! /usr/bin/env bash

# Exit in case of error
set -e

# Run this from the root of the project to generate a dev-link project
# It will contain a link to each of the files of the generator, except for
# .env and frontend/.env, that will be the generated ones
# This allows developing with a live stack while keeping the same source code
# Without having to generate dev-fsfp and integrating back all the files

rm -rf dev-link
mkdir -p tmp-dev-link/frontend

cookiecutter --no-input -f ./ project_name="Dev Link"

mv ./dev-link/.env ./tmp-dev-link/
mv ./dev-link/frontend/.env ./tmp-dev-link/frontend/

rm -rf ./dev-link/
mkdir -p ./dev-link/

cd ./dev-link/

for f in ../\{\{cookiecutter.project_slug\}\}/* ; do
ln -s "$f" ./
done

cd ..

mv ./tmp-dev-link/.env ./dev-link/
mv ./tmp-dev-link/frontend/.env ./dev-link/frontend/

rm -rf ./tmp-dev-link
6 changes: 4 additions & 2 deletions scripts/discard-dev-files.sh
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
#! /usr/bin/env bash

set -e

rm -rf \{\{cookiecutter.project_slug\}\}/.git
rm -rf \{\{cookiecutter.project_slug\}\}/backend/app/poetry.lock
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/node_modules
rm -rf \{\{cookiecutter.project_slug\}\}/frontend/dist
git checkout \{\{cookiecutter.project_slug\}\}/README.md
git checkout \{\{cookiecutter.project_slug\}\}/.gitlab-ci.yml
git checkout \{\{cookiecutter.project_slug\}\}/cookiecutter-config-file.yml
git checkout \{\{cookiecutter.project_slug\}\}/docker-compose.deploy.networks.yml
git checkout \{\{cookiecutter.project_slug\}\}/.env
git checkout \{\{cookiecutter.project_slug\}\}/frontend/.env

4 changes: 3 additions & 1 deletion test.sh → scripts/test.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,9 +3,11 @@
# Exit in case of error
set -e

# Run this from the root of the project

rm -rf ./testing-project

cookiecutter --config-file ./testing-config.yml --no-input -f ./
cookiecutter --no-input -f ./ project_name="Testing Project"

cd ./testing-project

Expand Down
2 changes: 0 additions & 2 deletions testing-config.yml

This file was deleted.

Loading