staklink
VSCode extension for automating development and debugging in Codespaces.
staklink
is set up for Codespaces running one or more repositories in the /workspaces directory.
processes
There are 2 ways to configure your dev processes (like your backend, frontend, db, etc)
pm2
In your .devcontainer
folder, add a pm2.config.js
file. This can be used to manage your dev processes using pm2.
For example:
module.exports = {
apps: [
{
name: "sphinx-tribes-backend",
script: "./sphinx-tribes",
cwd: "/workspaces/sphinx-tribes",
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: "1G",
env: {
RESTART: "true",
REBUILD_COMMAND: "go build -o sphinx-tribes",
POST_RUN_COMMAND: "./seed-dummy-data.sh",
},
},
{
name: "sphinx-tribes-frontend",
script: "npm",
args: "run start:codespace",
cwd: "/workspaces/sphinx-tribes-frontend",
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: "1G",
env: {
NODE_ENV: "development",
INSTALL_COMMAND: "yarn install",
},
},
],
};
The above config runs the backend and the frontend. In the env
section:
RESTART
: will make the service rebuild and restart if needed (when code is updated)
REBUILD_COMMAND
: a custom "rebuild" command
INSTALL_COMMAND
: a custom dependency installation step
POST_RUN_COMMAND
: arbitrary command to run after a service starts (such as seeding DB with dummy data)
PORT
: port number, to let external workflows know which port maps to which service
docker-compose.yml
In your .devcontainer
folder, add a docker-compose.yml
file. This can be used to manage long-running processes that don't need to be controlled, rebuilt, or customized (like a database)
For example:
version: "3.8"
volumes:
postgres-data:
services:
app:
build:
context: .
dockerfile: Dockerfile
env_file:
- .env
volumes:
- ../..:/workspaces:cached
# Overrides default command so things don't shut down after the process ends.
command: sleep infinity
db:
image: postgres:latest
restart: unless-stopped
volumes:
- postgres-data:/var/lib/postgresql/data
env_file:
- .env
This config runs the dev container (app), and the backend database (db).