forked from cerc-io/stack-orchestrator
Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88db2ff766 | ||
|
|
5f556e127a | ||
|
|
926997b21c | ||
|
|
0d91a62f84 | ||
|
|
7d27eaef0f | ||
|
|
8ad2b692ec | ||
|
|
54cc993fa4 |
@@ -27,7 +27,7 @@ import subprocess
|
|||||||
import click
|
import click
|
||||||
import importlib.resources
|
import importlib.resources
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from stack_orchestrator.util import include_exclude_check, get_parsed_stack_config, stack_is_external
|
from stack_orchestrator.util import include_exclude_check, get_parsed_stack_config
|
||||||
from stack_orchestrator.base import get_npm_registry_url
|
from stack_orchestrator.base import get_npm_registry_url
|
||||||
|
|
||||||
# TODO: find a place for this
|
# TODO: find a place for this
|
||||||
@@ -58,8 +58,7 @@ def make_container_build_env(dev_root_path: str,
|
|||||||
return container_build_env
|
return container_build_env
|
||||||
|
|
||||||
|
|
||||||
def process_container(stack: str,
|
def process_container(container,
|
||||||
container,
|
|
||||||
container_build_dir: str,
|
container_build_dir: str,
|
||||||
container_build_env: dict,
|
container_build_env: dict,
|
||||||
dev_root_path: str,
|
dev_root_path: str,
|
||||||
@@ -70,29 +69,12 @@ def process_container(stack: str,
|
|||||||
):
|
):
|
||||||
if not quiet:
|
if not quiet:
|
||||||
print(f"Building: {container}")
|
print(f"Building: {container}")
|
||||||
|
build_dir = os.path.join(container_build_dir, container.replace("/", "-"))
|
||||||
default_container_tag = f"{container}:local"
|
build_script_filename = os.path.join(build_dir, "build.sh")
|
||||||
container_build_env.update({"CERC_DEFAULT_CONTAINER_IMAGE_TAG": default_container_tag})
|
|
||||||
|
|
||||||
# Check if this is in an external stack
|
|
||||||
if stack_is_external(stack):
|
|
||||||
container_parent_dir = Path(stack).joinpath("container-build")
|
|
||||||
temp_build_dir = container_parent_dir.joinpath(container.replace("/", "-"))
|
|
||||||
temp_build_script_filename = temp_build_dir.joinpath("build.sh")
|
|
||||||
# Now check if the container exists in the external stack.
|
|
||||||
if not temp_build_script_filename.exists():
|
|
||||||
# If not, revert to building an internal container
|
|
||||||
container_parent_dir = container_build_dir
|
|
||||||
else:
|
|
||||||
container_parent_dir = container_build_dir
|
|
||||||
|
|
||||||
build_dir = container_parent_dir.joinpath(container.replace("/", "-"))
|
|
||||||
build_script_filename = build_dir.joinpath("build.sh")
|
|
||||||
|
|
||||||
if verbose:
|
if verbose:
|
||||||
print(f"Build script filename: {build_script_filename}")
|
print(f"Build script filename: {build_script_filename}")
|
||||||
if os.path.exists(build_script_filename):
|
if os.path.exists(build_script_filename):
|
||||||
build_command = build_script_filename.as_posix()
|
build_command = build_script_filename
|
||||||
else:
|
else:
|
||||||
if verbose:
|
if verbose:
|
||||||
print(f"No script file found: {build_script_filename}, using default build script")
|
print(f"No script file found: {build_script_filename}, using default build script")
|
||||||
@@ -102,7 +84,7 @@ def process_container(stack: str,
|
|||||||
repo_full_path = os.path.join(dev_root_path, repo_dir)
|
repo_full_path = os.path.join(dev_root_path, repo_dir)
|
||||||
repo_dir_or_build_dir = repo_full_path if os.path.exists(repo_full_path) else build_dir
|
repo_dir_or_build_dir = repo_full_path if os.path.exists(repo_full_path) else build_dir
|
||||||
build_command = os.path.join(container_build_dir,
|
build_command = os.path.join(container_build_dir,
|
||||||
"default-build.sh") + f" {default_container_tag} {repo_dir_or_build_dir}"
|
"default-build.sh") + f" {container}:local {repo_dir_or_build_dir}"
|
||||||
if not dry_run:
|
if not dry_run:
|
||||||
if verbose:
|
if verbose:
|
||||||
print(f"Executing: {build_command} with environment: {container_build_env}")
|
print(f"Executing: {build_command} with environment: {container_build_env}")
|
||||||
@@ -176,7 +158,7 @@ def command(ctx, include, exclude, force_rebuild, extra_build_args):
|
|||||||
|
|
||||||
for container in containers_in_scope:
|
for container in containers_in_scope:
|
||||||
if include_exclude_check(container, include, exclude):
|
if include_exclude_check(container, include, exclude):
|
||||||
process_container(stack, container, container_build_dir, container_build_env,
|
process_container(container, container_build_dir, container_build_env,
|
||||||
dev_root_path, quiet, verbose, dry_run, continue_on_error)
|
dev_root_path, quiet, verbose, dry_run, continue_on_error)
|
||||||
else:
|
else:
|
||||||
if verbose:
|
if verbose:
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ def command(ctx, base_container, source_repo, force_rebuild, extra_build_args):
|
|||||||
container_build_env = build_containers.make_container_build_env(dev_root_path, container_build_dir, debug,
|
container_build_env = build_containers.make_container_build_env(dev_root_path, container_build_dir, debug,
|
||||||
force_rebuild, extra_build_args)
|
force_rebuild, extra_build_args)
|
||||||
|
|
||||||
build_containers.process_container(None, base_container, container_build_dir, container_build_env, dev_root_path, quiet,
|
build_containers.process_container(base_container, container_build_dir, container_build_env, dev_root_path, quiet,
|
||||||
verbose, dry_run, continue_on_error)
|
verbose, dry_run, continue_on_error)
|
||||||
|
|
||||||
|
|
||||||
@@ -73,5 +73,5 @@ def command(ctx, base_container, source_repo, force_rebuild, extra_build_args):
|
|||||||
webapp_name = os.path.abspath(source_repo).split(os.path.sep)[-1]
|
webapp_name = os.path.abspath(source_repo).split(os.path.sep)[-1]
|
||||||
container_build_env["CERC_CONTAINER_BUILD_TAG"] = f"cerc/{webapp_name}:local"
|
container_build_env["CERC_CONTAINER_BUILD_TAG"] = f"cerc/{webapp_name}:local"
|
||||||
|
|
||||||
build_containers.process_container(None, base_container, container_build_dir, container_build_env, dev_root_path, quiet,
|
build_containers.process_container(base_container, container_build_dir, container_build_env, dev_root_path, quiet,
|
||||||
verbose, dry_run, continue_on_error)
|
verbose, dry_run, continue_on_error)
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
# Copyright © 2023 Vulcanize
|
|
||||||
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http:#www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
stack_file_name = "stack.yml"
|
|
||||||
@@ -2,7 +2,7 @@ version: "3.2"
|
|||||||
# See: https://docs.ipfs.tech/install/run-ipfs-inside-docker/#set-up
|
# See: https://docs.ipfs.tech/install/run-ipfs-inside-docker/#set-up
|
||||||
services:
|
services:
|
||||||
ipfs:
|
ipfs:
|
||||||
image: ipfs/kubo:master-2023-02-20-714a968
|
image: ipfs/kubo:v0.24.0
|
||||||
restart: always
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- ./ipfs/import:/import
|
- ./ipfs/import:/import
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
version: "3.2"
|
||||||
|
|
||||||
|
services:
|
||||||
|
osmosis-front-end:
|
||||||
|
image: cerc/osmosis-front-end:local
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "3002:3002" #TODO make `3000` when using the deployment feature
|
||||||
@@ -39,4 +39,4 @@ EXPOSE 3000
|
|||||||
COPY /scripts /scripts
|
COPY /scripts /scripts
|
||||||
|
|
||||||
# Default command sleeps forever so docker doesn't kill it
|
# Default command sleeps forever so docker doesn't kill it
|
||||||
ENTRYPOINT ["/scripts/start-serving-app.sh"]
|
CMD ["/scripts/start-serving-app.sh"]
|
||||||
|
|||||||
@@ -11,19 +11,3 @@ CERC_CONTAINER_BUILD_DOCKERFILE=${CERC_CONTAINER_BUILD_DOCKERFILE:-$SCRIPT_DIR/D
|
|||||||
CERC_CONTAINER_BUILD_TAG=${CERC_CONTAINER_BUILD_TAG:-cerc/nextjs-base:local}
|
CERC_CONTAINER_BUILD_TAG=${CERC_CONTAINER_BUILD_TAG:-cerc/nextjs-base:local}
|
||||||
|
|
||||||
docker build -t $CERC_CONTAINER_BUILD_TAG ${build_command_args} -f $CERC_CONTAINER_BUILD_DOCKERFILE $CERC_CONTAINER_BUILD_WORK_DIR
|
docker build -t $CERC_CONTAINER_BUILD_TAG ${build_command_args} -f $CERC_CONTAINER_BUILD_DOCKERFILE $CERC_CONTAINER_BUILD_WORK_DIR
|
||||||
|
|
||||||
if [ $? -eq 0 ] && [ "$CERC_CONTAINER_BUILD_TAG" != "cerc/nextjs-base:local" ]; then
|
|
||||||
cat <<EOF
|
|
||||||
|
|
||||||
#################################################################
|
|
||||||
|
|
||||||
Built host container for $CERC_CONTAINER_BUILD_WORK_DIR with tag:
|
|
||||||
|
|
||||||
$CERC_CONTAINER_BUILD_TAG
|
|
||||||
|
|
||||||
To test locally run:
|
|
||||||
|
|
||||||
docker run -p 3000:3000 --env-file /path/to/environment.env $CERC_CONTAINER_BUILD_TAG
|
|
||||||
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|||||||
@@ -38,9 +38,6 @@ for f in $(find "$TRG_DIR" -regex ".*.[tj]sx?$" -type f | grep -v 'node_modules'
|
|||||||
orig_name=$(echo -n "${e}" | sed 's/"//g')
|
orig_name=$(echo -n "${e}" | sed 's/"//g')
|
||||||
cur_name=$(echo -n "${orig_name}" | sed 's/CERC_RUNTIME_ENV_//g')
|
cur_name=$(echo -n "${orig_name}" | sed 's/CERC_RUNTIME_ENV_//g')
|
||||||
cur_val=$(echo -n "\$${cur_name}" | envsubst)
|
cur_val=$(echo -n "\$${cur_name}" | envsubst)
|
||||||
if [ "$CERC_RETAIN_ENV_QUOTES" != "true" ]; then
|
|
||||||
cur_val=$(sed "s/^[\"']//" <<< "$cur_val" | sed "s/[\"']//")
|
|
||||||
fi
|
|
||||||
esc_val=$(sed 's/[&/\]/\\&/g' <<< "$cur_val")
|
esc_val=$(sed 's/[&/\]/\\&/g' <<< "$cur_val")
|
||||||
echo "$f: $cur_name=$cur_val"
|
echo "$f: $cur_name=$cur_val"
|
||||||
sed -i "s/$orig_name/$esc_val/g" $f
|
sed -i "s/$orig_name/$esc_val/g" $f
|
||||||
|
|||||||
+7
-25
@@ -3,16 +3,7 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
|||||||
set -x
|
set -x
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
CERC_MAX_GENERATE_TIME=${CERC_MAX_GENERATE_TIME:-60}
|
|
||||||
tpid=""
|
|
||||||
|
|
||||||
ctrl_c() {
|
|
||||||
kill $tpid $(ps -ef | grep node | grep next | awk '{print $2}') 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
trap ctrl_c INT
|
|
||||||
|
|
||||||
CERC_BUILD_TOOL="${CERC_BUILD_TOOL}"
|
CERC_BUILD_TOOL="${CERC_BUILD_TOOL}"
|
||||||
if [ -z "$CERC_BUILD_TOOL" ]; then
|
if [ -z "$CERC_BUILD_TOOL" ]; then
|
||||||
@@ -34,27 +25,18 @@ if [ "$CERC_NEXTJS_SKIP_GENERATE" != "true" ]; then
|
|||||||
jq -e '.scripts.cerc_generate' package.json >/dev/null
|
jq -e '.scripts.cerc_generate' package.json >/dev/null
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
npm run cerc_generate > gen.out 2>&1 &
|
npm run cerc_generate > gen.out 2>&1 &
|
||||||
tail -f gen.out &
|
tail -n0 -f gen.out | sed '/rendered as static HTML/ q'
|
||||||
tpid=$!
|
|
||||||
|
|
||||||
count=0
|
count=0
|
||||||
generate_done="false"
|
while [ $count -lt 10 ]; do
|
||||||
while [ $count -lt $CERC_MAX_GENERATE_TIME ] && [ "$generate_done" == "false" ]; do
|
|
||||||
sleep 1
|
sleep 1
|
||||||
|
ps -ef | grep 'node' | grep 'next' | grep 'generate' >/dev/null
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
count=$((count + 1))
|
count=$((count + 1))
|
||||||
grep 'rendered as static HTML' gen.out > /dev/null
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
generate_done="true"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
kill $(ps -ef |grep node | grep next | grep generate | awk '{print $2}') 2>/dev/null
|
||||||
if [ $generate_done != "true" ]; then
|
|
||||||
echo "ERROR: 'npm run cerc_generate' not successful within CERC_MAX_GENERATE_TIME" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
kill $tpid $(ps -ef | grep node | grep next | grep generate | awk '{print $2}') 2>/dev/null
|
|
||||||
tpid=""
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build the osmosis front end image
|
||||||
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
|
docker build -t cerc/osmosis-front-end:local -f ${CERC_REPO_BASE_DIR}/osmosis-frontend/docker/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/osmosis-frontend
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# self-hosted osmosis
|
||||||
|
|
||||||
|
Build and deploy:
|
||||||
|
- 1) self-hosted gitea,
|
||||||
|
- 2) an ipfs node,
|
||||||
|
- 3) the osmosis front end,
|
||||||
|
- 4) a laconicd chain
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
# support image for the gitea package registry
|
||||||
|
laconic-so --stack build-support build-containers
|
||||||
|
|
||||||
|
# todo: pre-run clone
|
||||||
|
|
||||||
|
# clones and builds several things
|
||||||
|
laconic-so --stack osmosis setup-repositories
|
||||||
|
laconic-so --stack osmosis build-containers
|
||||||
|
laconic-so --stack osmosis deploy up
|
||||||
|
```
|
||||||
|
|
||||||
|
Setup a test chain:
|
||||||
|
```
|
||||||
|
export CERC_NPM_REGISTRY_URL=https://git.vdb.to/api/packages/cerc-io/npm/
|
||||||
|
|
||||||
|
laconic-so --stack fixturenet-laconic-loaded setup-repositories --include git.vdb.to/cerc-io/laconicd,git.vdb.to/cerc-io/laconic-sdk,git.vdb.to/cerc-io/laconic-registry-cli,git.vdb.to/cerc-io/laconic-console
|
||||||
|
|
||||||
|
laconic-so --stack fixturenet-laconic-loaded build-containers
|
||||||
|
|
||||||
|
export LACONIC_HOSTED_ENDPOINT=http://<your-IP>
|
||||||
|
|
||||||
|
laconic-so --stack fixturenet-laconic-loaded deploy up
|
||||||
|
```
|
||||||
|
|
||||||
|
then `docker exec` into the `laconicd` container and either export the private key or create a new one and send funds to it. Use that private key for `LACONIC_HOTWALLET_KEY`.
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
version: "0.1"
|
||||||
|
name: osmosis
|
||||||
|
repos:
|
||||||
|
# these are for gitea
|
||||||
|
- git.vdb.to/cerc-io/hosting@names-for-so
|
||||||
|
- gitea.com/gitea/act_runner
|
||||||
|
# add the osmosis FE
|
||||||
|
- github.com/osmosis-labs/osmosis-frontend
|
||||||
|
containers:
|
||||||
|
- cerc/act-runner
|
||||||
|
- cerc/act-runner-task-executor
|
||||||
|
# note: osmosis builds but doesn't run
|
||||||
|
- cerc/osmosis-front-end
|
||||||
|
pods:
|
||||||
|
- name: gitea
|
||||||
|
repository: cerc-io/hosting
|
||||||
|
path: gitea
|
||||||
|
pre_start_command: "run-this-first.sh"
|
||||||
|
post_start_command: "initialize-gitea.sh"
|
||||||
|
# todo, e.g., mirroring all of osmosis repos: https://git.vdb.to/cerc-io/hosting/pulls/42
|
||||||
|
- name: act-runner
|
||||||
|
repository: cerc-io/hosting
|
||||||
|
path: act-runner
|
||||||
|
pre_start_command: "pre_start.sh"
|
||||||
|
post_start_command: "post_start.sh"
|
||||||
|
- osmosis-front-end
|
||||||
|
- kubo
|
||||||
@@ -25,8 +25,7 @@ import click
|
|||||||
import importlib.resources
|
import importlib.resources
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import yaml
|
import yaml
|
||||||
from stack_orchestrator.constants import stack_file_name
|
from stack_orchestrator.util import include_exclude_check
|
||||||
from stack_orchestrator.util import include_exclude_check, stack_is_external, error_exit
|
|
||||||
|
|
||||||
|
|
||||||
class GitProgress(git.RemoteProgress):
|
class GitProgress(git.RemoteProgress):
|
||||||
@@ -239,20 +238,13 @@ def command(ctx, include, exclude, git_ssh, check_only, pull, branches, branches
|
|||||||
|
|
||||||
repos_in_scope = []
|
repos_in_scope = []
|
||||||
if stack:
|
if stack:
|
||||||
if stack_is_external(stack):
|
|
||||||
stack_file_path = Path(stack).joinpath(stack_file_name)
|
|
||||||
else:
|
|
||||||
# In order to be compatible with Python 3.8 we need to use this hack to get the path:
|
# In order to be compatible with Python 3.8 we need to use this hack to get the path:
|
||||||
# See: https://stackoverflow.com/questions/25389095/python-get-path-of-root-project-structure
|
# See: https://stackoverflow.com/questions/25389095/python-get-path-of-root-project-structure
|
||||||
stack_file_path = Path(__file__).absolute().parent.parent.joinpath("data", "stacks", stack, stack_file_name)
|
stack_file_path = Path(__file__).absolute().parent.parent.joinpath("data", "stacks", stack, "stack.yml")
|
||||||
if not stack_file_path.exists():
|
|
||||||
error_exit(f"stack {stack} does not exist")
|
|
||||||
with stack_file_path:
|
with stack_file_path:
|
||||||
stack_config = yaml.safe_load(open(stack_file_path, "r"))
|
stack_config = yaml.safe_load(open(stack_file_path, "r"))
|
||||||
if "repos" not in stack_config:
|
# TODO: syntax check the input here
|
||||||
error_exit(f"stack {stack} does not define any repositories")
|
repos_in_scope = stack_config['repos']
|
||||||
else:
|
|
||||||
repos_in_scope = stack_config["repos"]
|
|
||||||
else:
|
else:
|
||||||
repos_in_scope = all_repos
|
repos_in_scope = all_repos
|
||||||
|
|
||||||
|
|||||||
@@ -150,12 +150,6 @@ def get_parsed_deployment_spec(spec_file):
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def stack_is_external(stack: str):
|
|
||||||
# Bit of a hack: if the supplied stack string represents
|
|
||||||
# a path that exists then we assume it must be external
|
|
||||||
return Path(stack).exists() if stack is not None else False
|
|
||||||
|
|
||||||
|
|
||||||
def get_yaml():
|
def get_yaml():
|
||||||
# See: https://stackoverflow.com/a/45701840/1701505
|
# See: https://stackoverflow.com/a/45701840/1701505
|
||||||
yaml = ruamel.yaml.YAML()
|
yaml = ruamel.yaml.YAML()
|
||||||
@@ -173,8 +167,3 @@ def global_options(ctx):
|
|||||||
# TODO: hack
|
# TODO: hack
|
||||||
def global_options2(ctx):
|
def global_options2(ctx):
|
||||||
return ctx.parent.obj
|
return ctx.parent.obj
|
||||||
|
|
||||||
|
|
||||||
def error_exit(s):
|
|
||||||
print(f"ERROR: {s}")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
set -x
|
set -x
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Dump environment variables for debugging
|
# Dump environment variables for debugging
|
||||||
echo "Environment variables:"
|
echo "Environment variables:"
|
||||||
env
|
env
|
||||||
@@ -30,18 +28,16 @@ CHECK="SPECIAL_01234567890_TEST_STRING"
|
|||||||
|
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
CONTAINER_ID=$(docker run -p 3000:3000 -d -e CERC_SCRIPT_DEBUG=$CERC_SCRIPT_DEBUG cerc/test-progressive-web-app:local)
|
CONTAINER_ID=$(docker run -p 3000:3000 -d cerc/test-progressive-web-app:local)
|
||||||
sleep 3
|
sleep 3
|
||||||
wget -t 7 -O test.before -m http://localhost:3000
|
wget -O test.before -m http://localhost:3000
|
||||||
|
|
||||||
docker logs $CONTAINER_ID
|
|
||||||
docker remove -f $CONTAINER_ID
|
docker remove -f $CONTAINER_ID
|
||||||
|
|
||||||
CONTAINER_ID=$(docker run -p 3000:3000 -e CERC_WEBAPP_DEBUG=$CHECK -e CERC_SCRIPT_DEBUG=$CERC_SCRIPT_DEBUG -d cerc/test-progressive-web-app:local)
|
CONTAINER_ID=$(docker run -p 3000:3000 -e CERC_WEBAPP_DEBUG=$CHECK -d cerc/test-progressive-web-app:local)
|
||||||
sleep 3
|
sleep 3
|
||||||
wget -t 7 -O test.after -m http://localhost:3000
|
wget -O test.after -m http://localhost:3000
|
||||||
|
|
||||||
docker logs $CONTAINER_ID
|
|
||||||
docker remove -f $CONTAINER_ID
|
docker remove -f $CONTAINER_ID
|
||||||
|
|
||||||
echo "###########################################################################"
|
echo "###########################################################################"
|
||||||
|
|||||||
Reference in New Issue
Block a user