mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-07-17 09:24:34 +00:00
feat: refactor local development setup
This commit is contained in:
parent
d22f67f061
commit
f818721c6b
6 changed files with 409 additions and 55 deletions
290
.config/local-db.yml
Normal file
290
.config/local-db.yml
Normal file
|
@ -0,0 +1,290 @@
|
||||||
|
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
# Misskey configuration
|
||||||
|
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
# ┌─────┐
|
||||||
|
#───┘ URL └─────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
# Final accessible URL seen by a user.
|
||||||
|
url: http://localhost:3000
|
||||||
|
|
||||||
|
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||||
|
# URL SETTINGS AFTER THAT!
|
||||||
|
|
||||||
|
# ┌───────────────────────┐
|
||||||
|
#───┘ Port and TLS settings └───────────────────────────────────
|
||||||
|
|
||||||
|
#
|
||||||
|
# Misskey requires a reverse proxy to support HTTPS connections.
|
||||||
|
#
|
||||||
|
# +----- https://example.tld/ ------------+
|
||||||
|
# +------+ |+-------------+ +----------------+|
|
||||||
|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
|
||||||
|
# +------+ |+-------------+ +----------------+|
|
||||||
|
# +---------------------------------------+
|
||||||
|
#
|
||||||
|
# You need to set up a reverse proxy. (e.g. nginx)
|
||||||
|
# An encrypted connection with HTTPS is highly recommended
|
||||||
|
# because tokens may be transferred in GET requests.
|
||||||
|
|
||||||
|
# The port that your Misskey server should listen on.
|
||||||
|
port: 3000
|
||||||
|
|
||||||
|
# ┌──────────────────────────┐
|
||||||
|
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||||
|
|
||||||
|
db:
|
||||||
|
host: localhost
|
||||||
|
port: 5432
|
||||||
|
|
||||||
|
# Database name
|
||||||
|
db: postgres
|
||||||
|
|
||||||
|
# Auth
|
||||||
|
user: postgres
|
||||||
|
pass: ci
|
||||||
|
|
||||||
|
# Whether disable Caching queries
|
||||||
|
#disableCache: true
|
||||||
|
|
||||||
|
# Extra Connection options
|
||||||
|
#extra:
|
||||||
|
# ssl: true
|
||||||
|
|
||||||
|
dbReplications: false
|
||||||
|
|
||||||
|
# You can configure any number of replicas here
|
||||||
|
#dbSlaves:
|
||||||
|
# -
|
||||||
|
# host:
|
||||||
|
# port:
|
||||||
|
# db:
|
||||||
|
# user:
|
||||||
|
# pass:
|
||||||
|
# -
|
||||||
|
# host:
|
||||||
|
# port:
|
||||||
|
# db:
|
||||||
|
# user:
|
||||||
|
# pass:
|
||||||
|
|
||||||
|
# ┌─────────────────────┐
|
||||||
|
#───┘ Redis configuration └─────────────────────────────────────
|
||||||
|
|
||||||
|
redis:
|
||||||
|
host: localhost
|
||||||
|
port: 6379
|
||||||
|
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||||
|
#pass: example-pass
|
||||||
|
#prefix: example-prefix
|
||||||
|
#db: 1
|
||||||
|
|
||||||
|
#redisForPubsub:
|
||||||
|
# host: redis
|
||||||
|
# port: 6379
|
||||||
|
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||||
|
# #pass: example-pass
|
||||||
|
# #prefix: example-prefix
|
||||||
|
# #db: 1
|
||||||
|
|
||||||
|
#redisForJobQueue:
|
||||||
|
# host: redis
|
||||||
|
# port: 6379
|
||||||
|
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||||
|
# #pass: example-pass
|
||||||
|
# #prefix: example-prefix
|
||||||
|
# #db: 1
|
||||||
|
|
||||||
|
#redisForTimelines:
|
||||||
|
# host: redis
|
||||||
|
# port: 6379
|
||||||
|
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||||
|
# #pass: example-pass
|
||||||
|
# #prefix: example-prefix
|
||||||
|
# #db: 1
|
||||||
|
|
||||||
|
#redisForRateLimit:
|
||||||
|
# host: localhost
|
||||||
|
# port: 6379
|
||||||
|
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||||
|
# #pass: example-pass
|
||||||
|
# #prefix: example-prefix
|
||||||
|
# #db: 1
|
||||||
|
# # You can specify more ioredis options...
|
||||||
|
# #username: example-username
|
||||||
|
|
||||||
|
# ┌───────────────────────────────┐
|
||||||
|
#───┘ Fulltext search configuration └─────────────────────────────
|
||||||
|
|
||||||
|
# These are the setting items for the full-text search provider.
|
||||||
|
fulltextSearch:
|
||||||
|
# You can select the ID generation method.
|
||||||
|
# - sqlLike (default)
|
||||||
|
# Use SQL-like search.
|
||||||
|
# This is a standard feature of PostgreSQL, so no special extensions are required.
|
||||||
|
# - sqlPgroonga
|
||||||
|
# Use pgroonga.
|
||||||
|
# You need to install pgroonga and configure it as a PostgreSQL extension.
|
||||||
|
# In addition to the above, you need to create a pgroonga index on the text column of the note table.
|
||||||
|
# see: https://pgroonga.github.io/tutorial/
|
||||||
|
# - meilisearch
|
||||||
|
# Use Meilisearch.
|
||||||
|
# You need to install Meilisearch and configure.
|
||||||
|
provider: sqlLike
|
||||||
|
|
||||||
|
# For Meilisearch settings.
|
||||||
|
# If you select "meilisearch" for "fulltextSearch.provider", it must be set.
|
||||||
|
# You can set scope to local or global (default value)
|
||||||
|
# (include notes from remote).
|
||||||
|
|
||||||
|
#meilisearch:
|
||||||
|
# host: meilisearch
|
||||||
|
# port: 7700
|
||||||
|
# apiKey: ''
|
||||||
|
# ssl: true
|
||||||
|
# index: ''
|
||||||
|
# scope: global
|
||||||
|
|
||||||
|
# ┌───────────────┐
|
||||||
|
#───┘ ID generation └───────────────────────────────────────────
|
||||||
|
|
||||||
|
# You can select the ID generation method.
|
||||||
|
# You don't usually need to change this setting, but you can
|
||||||
|
# change it according to your preferences.
|
||||||
|
|
||||||
|
# Available methods:
|
||||||
|
# aid ... Short, Millisecond accuracy
|
||||||
|
# aidx ... Millisecond accuracy
|
||||||
|
# meid ... Similar to ObjectID, Millisecond accuracy
|
||||||
|
# ulid ... Millisecond accuracy
|
||||||
|
# objectid ... This is left for backward compatibility
|
||||||
|
|
||||||
|
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||||
|
# ID SETTINGS AFTER THAT!
|
||||||
|
|
||||||
|
id: 'aidx'
|
||||||
|
|
||||||
|
# ┌─────────────────────┐
|
||||||
|
#───┘ Other configuration └─────────────────────────────────────
|
||||||
|
|
||||||
|
# Whether disable HSTS
|
||||||
|
#disableHsts: true
|
||||||
|
|
||||||
|
# Number of worker processes
|
||||||
|
#clusterLimit: 1
|
||||||
|
|
||||||
|
# Job concurrency per worker
|
||||||
|
# deliverJobConcurrency: 128
|
||||||
|
# inboxJobConcurrency: 16
|
||||||
|
# relashionshipJobConcurrency: 16
|
||||||
|
# What's relashionshipJob?:
|
||||||
|
# Follow, unfollow, block and unblock(ings) while following-imports, etc. or account migrations.
|
||||||
|
|
||||||
|
# Job rate limiter
|
||||||
|
# deliverJobPerSec: 128
|
||||||
|
# inboxJobPerSec: 32
|
||||||
|
# relashionshipJobPerSec: 64
|
||||||
|
|
||||||
|
# Job attempts
|
||||||
|
# deliverJobMaxAttempts: 12
|
||||||
|
# inboxJobMaxAttempts: 8
|
||||||
|
|
||||||
|
# Local address used for outgoing requests
|
||||||
|
#outgoingAddress: 127.0.0.1
|
||||||
|
|
||||||
|
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||||
|
#outgoingAddressFamily: ipv4
|
||||||
|
|
||||||
|
# Amount of characters that can be used when writing notes. Longer notes will be rejected. (minimum: 1)
|
||||||
|
#maxNoteLength: 3000
|
||||||
|
# Amount of characters that will be saved for remote notes. Longer notes will be truncated to this length. (minimum: 1)
|
||||||
|
#maxRemoteNoteLength: 100000
|
||||||
|
# Amount of characters that can be used when writing content warnings. Longer warnings will be rejected. (minimum: 1)
|
||||||
|
#maxCwLength: 500
|
||||||
|
# Amount of characters that will be saved for remote content warnings. Longer warnings will be truncated to this length. (minimum: 1)
|
||||||
|
#maxRemoteCwLength: 5000
|
||||||
|
# Amount of characters that can be used when writing media descriptions (alt text). Longer descriptions will be rejected. (minimum: 1)
|
||||||
|
#maxAltTextLength: 20000
|
||||||
|
# Amount of characters that will be saved for remote media descriptions (alt text). Longer descriptions will be truncated to this length. (minimum: 1)
|
||||||
|
#maxRemoteAltTextLength: 100000
|
||||||
|
|
||||||
|
# Proxy for HTTP/HTTPS
|
||||||
|
#proxy: http://127.0.0.1:3128
|
||||||
|
|
||||||
|
proxyBypassHosts:
|
||||||
|
- api.deepl.com
|
||||||
|
- api-free.deepl.com
|
||||||
|
- www.recaptcha.net
|
||||||
|
- hcaptcha.com
|
||||||
|
- challenges.cloudflare.com
|
||||||
|
|
||||||
|
# Proxy for SMTP/SMTPS
|
||||||
|
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
|
||||||
|
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
|
||||||
|
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
|
||||||
|
|
||||||
|
# Media Proxy
|
||||||
|
#mediaProxy: https://example.com/proxy
|
||||||
|
|
||||||
|
# Proxy remote files (default: true)
|
||||||
|
# Proxy remote files by this instance or mediaProxy to prevent remote files from running in remote domains.
|
||||||
|
proxyRemoteFiles: true
|
||||||
|
|
||||||
|
# Movie Thumbnail Generation URL
|
||||||
|
# There is no reference implementation.
|
||||||
|
# For example, Misskey will point to the following URL:
|
||||||
|
# https://example.com/thumbnail.webp?thumbnail=1&url=https%3A%2F%2Fstorage.example.com%2Fpath%2Fto%2Fvideo.mp4
|
||||||
|
#videoThumbnailGenerator: https://example.com
|
||||||
|
|
||||||
|
# Sign outgoing ActivityPub GET request (default: true)
|
||||||
|
signToActivityPubGet: true
|
||||||
|
# Sign outgoing ActivityPub Activities (default: true)
|
||||||
|
# Linked Data signatures are cryptographic signatures attached to each activity to provide proof of authenticity.
|
||||||
|
# When using authorized fetch, this is often undesired as any signed activity can be forwarded to a blocked instance by relays and other instances.
|
||||||
|
# This setting allows admins to disable LD signatures for increased privacy, at the expense of fewer relayed activities and additional inbound fetch (GET) requests.
|
||||||
|
attachLdSignatureForRelays: true
|
||||||
|
# check that inbound ActivityPub GET requests are signed ("authorized fetch")
|
||||||
|
checkActivityPubGetSignature: false
|
||||||
|
|
||||||
|
# For security reasons, uploading attachments from the intranet is prohibited,
|
||||||
|
# but exceptions can be made from the following settings. Default value is "undefined".
|
||||||
|
# Read changelog to learn more (Improvements of 12.90.0 (2021/09/04)).
|
||||||
|
allowedPrivateNetworks: [
|
||||||
|
'127.0.0.1/32',
|
||||||
|
'192.168.65.0/24'
|
||||||
|
]
|
||||||
|
|
||||||
|
#customMOTD: ['Hello World', 'The sharks rule all', 'Shonks']
|
||||||
|
|
||||||
|
# Upload or download file size limits (bytes)
|
||||||
|
#maxFileSize: 262144000
|
||||||
|
|
||||||
|
# CHMod-style permission bits to apply to uploaded files.
|
||||||
|
# Permission bits are specified as a base-8 string representing User/Group/Other permissions.
|
||||||
|
# This setting is only useful for custom deployments, such as using a reverse proxy to serve media.
|
||||||
|
#filePermissionBits: '644'
|
||||||
|
|
||||||
|
# Log settings
|
||||||
|
# logging:
|
||||||
|
# sql:
|
||||||
|
# # Outputs query parameters during SQL execution to the log.
|
||||||
|
# # default: false
|
||||||
|
# enableQueryParamLogging: false
|
||||||
|
# # Disable query truncation. If set to true, the full text of the query will be output to the log.
|
||||||
|
# # default: false
|
||||||
|
# disableQueryTruncation: false
|
||||||
|
|
||||||
|
# Settings for the activity logger, which records inbound activities to the database.
|
||||||
|
# Disabled by default due to the large volume of data it saves.
|
||||||
|
#activityLogging:
|
||||||
|
# Log activities to the database (default: false)
|
||||||
|
#enabled: false
|
||||||
|
|
||||||
|
# Save the activity before processing, then update later with the results.
|
||||||
|
# This has the advantage of capturing activities that cause a hard-crash, but doubles the number of queries used.
|
||||||
|
# Default: false
|
||||||
|
#preSave: false
|
||||||
|
|
||||||
|
# How long to save each log entry before deleting it.
|
||||||
|
# Default: 2592000000 (1 week)
|
||||||
|
#maxAge: 2592000000
|
|
@ -6,7 +6,7 @@
|
||||||
#───┘ URL └─────────────────────────────────────────────────────
|
#───┘ URL └─────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Final accessible URL seen by a user.
|
# Final accessible URL seen by a user.
|
||||||
url: http://misskey.local:3000
|
url: http://localhost:3000
|
||||||
|
|
||||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
||||||
# URL SETTINGS AFTER THAT!
|
# URL SETTINGS AFTER THAT!
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -41,7 +41,8 @@ coverage
|
||||||
!/.config/docker_example.env
|
!/.config/docker_example.env
|
||||||
!/.config/cypress-devcontainer.yml
|
!/.config/cypress-devcontainer.yml
|
||||||
!/.config/docker_ci.env
|
!/.config/docker_ci.env
|
||||||
!/.config/dev.yml
|
!/.config/local-dev.yml
|
||||||
|
!/.config/local-db.yml
|
||||||
docker-compose.yml
|
docker-compose.yml
|
||||||
./compose.yml
|
./compose.yml
|
||||||
.devcontainer/compose.yml
|
.devcontainer/compose.yml
|
||||||
|
|
115
dev.sh
Executable file
115
dev.sh
Executable file
|
@ -0,0 +1,115 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
read -p "How do you want to develop? [(l)ocal / (c)ontainer] " devset
|
||||||
|
case $devset in
|
||||||
|
[Ll] )
|
||||||
|
echo "Going to create postgres and redis containers now. They will log to this terminal."
|
||||||
|
echo "Press Ctrl + C to exit."
|
||||||
|
sleep 2
|
||||||
|
devmode="local-db"
|
||||||
|
;;
|
||||||
|
[Cc] )
|
||||||
|
echo "Going to create a container environment you can work in."
|
||||||
|
echo "Simply exit to stop the environment."
|
||||||
|
sleep 2
|
||||||
|
devmode="local-dev"
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
echo "Invalid option supplied. Quitting..."
|
||||||
|
exit -1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
cp ".config/$devmode.yml" .config/default.yml
|
||||||
|
cp .config/docker_ci.env .config/docker.env
|
||||||
|
|
||||||
|
if [[ "$devmode" == "local-dev" ]]; then
|
||||||
|
docker compose -f "./compose.$devmode.yml" up -d
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web apt-get update
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web apt-get install -y bash
|
||||||
|
|
||||||
|
echo Installing dependencies...
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web apt-get install -y git wget curl build-essential python3 ffmpeg libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web corepack enable
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web corepack prepare pnpm@latest --activate
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web git submodule update --init
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
read -p "Is this a new database? [y/N] " runinit
|
||||||
|
case $runinit in
|
||||||
|
[Yy] )
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web pnpm build
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web pnpm migrate
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web bash
|
||||||
|
|
||||||
|
echo Stopping containers...
|
||||||
|
docker compose -f "./compose.$devmode.yml" stop
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$devmode" == "local-db" ]]; then
|
||||||
|
read -p "Did you setup corepack and enable pnpm? [Y/n] " getpnpm
|
||||||
|
case $getpnpm in
|
||||||
|
[Nn] )
|
||||||
|
corepack enable
|
||||||
|
corepack prepare pnpm@latest --activate
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
pnpm i
|
||||||
|
|
||||||
|
read -p "Is this a new database? [y/N] " runinit
|
||||||
|
case $runinit in
|
||||||
|
[Yy] )
|
||||||
|
docker compose -f "./compose.$devmode.yml" up -d
|
||||||
|
pnpm build
|
||||||
|
pnpm migrate
|
||||||
|
docker compose -f "./compose.$devmode.yml" down
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
docker compose -f "./compose.$devmode.yml" up
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -p "Scrub dev environment? (Deletes containers AND instance!!!) [y/N] " scrubDev
|
||||||
|
|
||||||
|
case $scrubDev in
|
||||||
|
[Yy] )
|
||||||
|
if [[ "$devmode" == "local-dev" ]]; then
|
||||||
|
docker compose -f "./compose.$devmode.yml" start web
|
||||||
|
docker compose -f "./compose.$devmode.yml" exec web pnpm clean-all
|
||||||
|
else
|
||||||
|
pnpm clean-all
|
||||||
|
fi
|
||||||
|
docker compose -f "./compose.$devmode.yml" down
|
||||||
|
rm -rf ./db -v
|
||||||
|
rm -rf ./redis -v
|
||||||
|
rm -rf ./files -v
|
||||||
|
rm -rf ./node_modules -v #TODO: check if these last two are needed
|
||||||
|
rm -rf ./pnpm-store -v
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# read -p "Reset databases? [y/N] " cleardb
|
||||||
|
# case $cleardb in
|
||||||
|
# [Yy] )
|
||||||
|
# echo "Clearning postgres..."
|
||||||
|
# rm -rf ./db
|
||||||
|
# sleep 1
|
||||||
|
# echo "Clearing redis..."
|
||||||
|
# rm -rf ./redis
|
||||||
|
# sleep 1
|
||||||
|
# ;;
|
||||||
|
# * )
|
||||||
|
# ;;
|
||||||
|
# esac
|
|
@ -90,6 +90,7 @@ export function getConfig(): UserConfig {
|
||||||
base: '/vite/',
|
base: '/vite/',
|
||||||
|
|
||||||
server: {
|
server: {
|
||||||
|
host: true,
|
||||||
port: 5173,
|
port: 5173,
|
||||||
hmr: {
|
hmr: {
|
||||||
// バックエンド経由での起動時、Viteは5173経由でアセットを参照していると思い込んでいるが実際は3000から配信される
|
// バックエンド経由での起動時、Viteは5173経由でアセットを参照していると思い込んでいるが実際は3000から配信される
|
||||||
|
|
53
setup-dev.sh
53
setup-dev.sh
|
@ -1,53 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
read -p "Reset databases? [y/N] " cleardb
|
|
||||||
|
|
||||||
case $cleardb in
|
|
||||||
[Yy] )
|
|
||||||
echo "Clearning postgres..."
|
|
||||||
rm -rf ./db
|
|
||||||
sleep 1
|
|
||||||
echo "Clearing redis..."
|
|
||||||
rm -rf ./redis
|
|
||||||
sleep 1
|
|
||||||
;;
|
|
||||||
* )
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
cp .config/dev.yml .config/default.yml
|
|
||||||
cp .config/dev.yml .config/test.yml
|
|
||||||
cp .config/docker_ci.env .config/docker.env
|
|
||||||
cp compose.local-dev.yml compose.yml
|
|
||||||
|
|
||||||
echo Creating environment...
|
|
||||||
docker compose up -d
|
|
||||||
docker compose exec web apt-get update
|
|
||||||
docker compose exec web apt-get install -y bash
|
|
||||||
|
|
||||||
echo Installing dependencies...
|
|
||||||
docker compose exec web apt-get install -y git wget curl build-essential python3 ffmpeg libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
|
|
||||||
docker compose exec web corepack enable
|
|
||||||
docker compose exec web corepack prepare pnpm@latest --activate
|
|
||||||
docker compose exec web git submodule update --init
|
|
||||||
docker compose exec web pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
echo Environment is ready.
|
|
||||||
echo 5173 for dev, and 3000 for prod.
|
|
||||||
echo Do not forget to \`pnpm migrate\` before your first launch!
|
|
||||||
docker compose exec web bash
|
|
||||||
|
|
||||||
echo Stopping containers...
|
|
||||||
docker compose stop
|
|
||||||
|
|
||||||
read -p "Delete containers? [y/N] " scrubContainers
|
|
||||||
|
|
||||||
case $scrubContainers in
|
|
||||||
[Yy] )
|
|
||||||
docker compose down
|
|
||||||
;;
|
|
||||||
* )
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
rm -f compose.yml
|
|
Loading…
Add table
Reference in a new issue