From b6e40428bc6e04362979691c057e8864f4ab1c38 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Tue, 31 Oct 2023 10:02:24 -0300 Subject: [PATCH 01/25] Move Pharo dockerfile to its own folder --- .docker/docker-tests.sh | 2 +- .github/workflows/docker-build.yml | 8 ++++---- docker/{ => pharo}/Dockerfile | 0 docker/{ => pharo}/launchpad | 0 docker/{ => pharo}/launchpad-explain | 0 docker/{ => pharo}/launchpad-healthcheck | 0 docker/{ => pharo}/launchpad-list | 0 docker/{ => pharo}/launchpad-start | 0 8 files changed, 5 insertions(+), 5 deletions(-) rename docker/{ => pharo}/Dockerfile (100%) rename docker/{ => pharo}/launchpad (100%) rename docker/{ => pharo}/launchpad-explain (100%) rename docker/{ => pharo}/launchpad-healthcheck (100%) rename docker/{ => pharo}/launchpad-list (100%) rename docker/{ => pharo}/launchpad-start (100%) diff --git a/.docker/docker-tests.sh b/.docker/docker-tests.sh index a7c9c98..96bab9d 100755 --- a/.docker/docker-tests.sh +++ b/.docker/docker-tests.sh @@ -51,7 +51,7 @@ function assertOutputIncludesMessage() { set -e print_info "Building base image" -docker buildx build --tag launchpad:sut docker +docker buildx build --tag launchpad:sut docker/pharo print_info "Building examples image" docker buildx build \ diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 05803dc..33236a3 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -18,22 +18,22 @@ jobs: uses: actions/checkout@v3 - name: Docker meta id: docker_meta - uses: crazy-max/ghaction-docker-meta@v4 + uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/launchpad - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Container Registry if: github.event_name != 'pull_request' - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ secrets.DOCKER_REGISTRY_USERNAME }} password: ${{ secrets.DOCKER_REGISTRY_TOKEN }} - name: Docker build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: - context: ./docker + context: ./docker/pharo push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} diff --git a/docker/Dockerfile b/docker/pharo/Dockerfile similarity index 100% rename from docker/Dockerfile rename to docker/pharo/Dockerfile diff --git a/docker/launchpad b/docker/pharo/launchpad similarity index 100% rename from docker/launchpad rename to docker/pharo/launchpad diff --git a/docker/launchpad-explain b/docker/pharo/launchpad-explain similarity index 100% rename from docker/launchpad-explain rename to docker/pharo/launchpad-explain diff --git a/docker/launchpad-healthcheck b/docker/pharo/launchpad-healthcheck similarity index 100% rename from docker/launchpad-healthcheck rename to docker/pharo/launchpad-healthcheck diff --git a/docker/launchpad-list b/docker/pharo/launchpad-list similarity index 100% rename from docker/launchpad-list rename to docker/pharo/launchpad-list diff --git a/docker/launchpad-start b/docker/pharo/launchpad-start similarity index 100% rename from docker/launchpad-start rename to docker/pharo/launchpad-start From 4876c7763688f62b315b51121e76a107926626fd Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 13:52:37 -0300 Subject: [PATCH 02/25] Update GS64 dockerfiles --- .docker/gs64/Dockerfile | 3 + .docker/gs64/docker-tests.sh | 151 ++++++++++++++++++++++++++++ .docker/gs64/gem.conf | 2 + .docker/{ => pharo}/Dockerfile | 0 .docker/{ => pharo}/docker-tests.sh | 2 +- .github/workflows/docker-tests.yml | 2 +- docker/gs64/Dockerfile | 7 ++ docker/gs64/launchpad | 16 +++ 8 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 .docker/gs64/Dockerfile create mode 100755 .docker/gs64/docker-tests.sh create mode 100644 .docker/gs64/gem.conf rename .docker/{ => pharo}/Dockerfile (100%) rename .docker/{ => pharo}/docker-tests.sh (99%) create mode 100644 docker/gs64/Dockerfile create mode 100755 docker/gs64/launchpad diff --git a/.docker/gs64/Dockerfile b/.docker/gs64/Dockerfile new file mode 100644 index 0000000..af543dd --- /dev/null +++ b/.docker/gs64/Dockerfile @@ -0,0 +1,3 @@ +FROM launchpad-gs64:sut + +CMD [ "launchpad", "start", "greeter" , "--name=DJ", "--title=Mr." ] diff --git a/.docker/gs64/docker-tests.sh b/.docker/gs64/docker-tests.sh new file mode 100755 index 0000000..b7754df --- /dev/null +++ b/.docker/gs64/docker-tests.sh @@ -0,0 +1,151 @@ +#!/usr/bin/env bash + +readonly ANSI_BOLD="\\033[1m" +readonly ANSI_RED="\\033[31m" +readonly ANSI_GREEN="\\033[32m" +readonly ANSI_BLUE="\\033[34m" +readonly ANSI_RESET="\\033[0m" + +function print_info() { + if [ -t 1 ]; then + printf "${ANSI_BOLD}${ANSI_BLUE}%s${ANSI_RESET}\\n" "$1" + else + echo "$1" + fi +} + +function print_success() { + if [ -t 1 ]; then + printf "${ANSI_BOLD}${ANSI_GREEN}%s${ANSI_RESET}\\n" "$1" + else + echo "$1" + fi +} + +function print_error() { + if [ -t 1 ]; then + printf "${ANSI_BOLD}${ANSI_RED}%s${ANSI_RESET}\\n" "$1" 1>&2 + else + echo "$1" 1>&2 + fi +} + +function executeWithArguments() { + rm -rf logs out err + LAST_ARGUMENTS=$* + "$@" > out 2> err || true +} + +function assertOutputIncludesMessage() { + local message=$1 + local output=$2 + + if [ "$(grep -c "$message" "$output")" -eq 0 ]; then + print_error "Expected std$output to have: '$message' when invoked with $LAST_ARGUMENTS" + print_info "Output contents" + cat "$output" + exit 1 + fi +} + +set -e + +print_info "Creating network" +docker network prune --force +docker network create --attachable launchpad-net + +print_info "Starting stone" +docker run --rm --detach --name gs64-stone \ + -e TZ="America/Argentina/Buenos_Aires" \ + --cap-add=SYS_RESOURCE \ + --network=launchpad-net \ + --volume=$PWD:/opt/gemstone/projects/Launchpad:ro \ + --volume=$PWD/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ + ghcr.io/ba-st/gs64-rowan:v3.7.0 + +sleep 1 +print_info "Loading Launchpad in the stone" +docker exec -t -u gemstone gs64-stone ./load-rowan-project.sh Launchpad + +print_info "Building base gem" +docker buildx build --tag launchpad-gs64:sut docker/gs64 + + print_info "Building examples gem" + docker buildx build \ + --tag launchpad-examples-gs64:sut \ + --file .docker/gs64/Dockerfile \ + . + +print_info "Running basic test" +executeWithArguments docker run \ + -e TZ="America/Argentina/Buenos_Aires" \ + -e GS64_STONE_HOSTNAME="gs64-stone" \ + --network=launchpad-net \ + --cap-add=SYS_RESOURCE \ + launchpad-examples-gs64:sut +assertOutputIncludesMessage '[INFO]' out +assertOutputIncludesMessage "Hi Mr. DJ!" out +print_success "OK" + +# print_info "Running basic test with structured logging" +# executeWithArguments docker run -e LAUNCHPAD__LOG_FORMAT='json' launchpad-examples:sut +# assertOutputIncludesMessage '"level":"INFO"' out +# assertOutputIncludesMessage "Hi Mr. DJ!" out +# print_success "OK" + +# print_info "Running --version test" +# executeWithArguments docker run launchpad-examples:sut launchpad --version +# assertOutputIncludesMessage "Launchpad" out +# print_success "OK" + +# print_info "Running launchpad-list test" +# executeWithArguments docker run launchpad-examples:sut launchpad-list +# assertOutputIncludesMessage "broken greeter" out +# print_success "OK" + +# print_info "Running launchpad-list --verbose test" +# executeWithArguments docker run launchpad-examples:sut launchpad-list --verbose +# assertOutputIncludesMessage "broken v0.0.1" out +# assertOutputIncludesMessage "greeter v1.0.0" out +# print_success "OK" + +# print_info "Running launchpad-explain test" +# executeWithArguments docker run launchpad-examples:sut launchpad-explain broken +# assertOutputIncludesMessage "broken \[v0.0.1\] - A broken application" out +# executeWithArguments docker run launchpad-examples:sut launchpad-explain greeter +# assertOutputIncludesMessage "greeter \[v1.0.0\] - A greetings application" out +# executeWithArguments docker run launchpad-examples:sut launchpad-explain +# assertOutputIncludesMessage "\[ERROR\] Missing application name or option." err +# print_success "OK" + +# print_info "Running launchpad-start greeter test" +# executeWithArguments docker run launchpad-examples:sut launchpad-start greeter --name=Juan +# assertOutputIncludesMessage "Hi Juan!" out +# print_success " Just name, OK" +# executeWithArguments docker run launchpad-examples:sut launchpad-start greeter --name=Julia --title=Miss +# assertOutputIncludesMessage "Hi Miss Julia!" out +# print_success " Name and title, OK" +# executeWithArguments docker run launchpad-examples:sut launchpad-start greeter --title=Miss +# assertOutputIncludesMessage "\[ERROR\] \"Name\" parameter not provided. You must provide one." err +# print_success " Missing name, OK" +# executeWithArguments docker run launchpad-examples:sut launchpad-start greeter +# assertOutputIncludesMessage "\[ERROR\] \"Name\" parameter not provided. You must provide one." err +# print_success "OK" + +# print_info "Running launchpad-start broken test" +# executeWithArguments docker run launchpad-examples:sut launchpad-start broken --raise-error +# assertOutputIncludesMessage "\[INFO\] Obtaining configuration... \[DONE\]" out +# assertOutputIncludesMessage "\[ERROR\] Unexpected startup error: \"Doh!\"" err +# print_success "OK" + +# print_info "Running launchpad-start command server test" +# # broken app keeps running when passed and invalid option +# executeWithArguments docker run --rm --name=broken-running -d launchpad-examples:sut launchpad-start broken -wait +# sleep 1 +# rm -f out +# docker stop -t 30 broken-running > out +# assertOutputIncludesMessage "broken-running" out +# print_success "OK" + +print_info "Stopping stone" +docker stop gs64-stone diff --git a/.docker/gs64/gem.conf b/.docker/gs64/gem.conf new file mode 100644 index 0000000..02f3d48 --- /dev/null +++ b/.docker/gs64/gem.conf @@ -0,0 +1,2 @@ +GEM_TEMPOBJ_CACHE_SIZE = 500000KB; + diff --git a/.docker/Dockerfile b/.docker/pharo/Dockerfile similarity index 100% rename from .docker/Dockerfile rename to .docker/pharo/Dockerfile diff --git a/.docker/docker-tests.sh b/.docker/pharo/docker-tests.sh similarity index 99% rename from .docker/docker-tests.sh rename to .docker/pharo/docker-tests.sh index 96bab9d..67d8c11 100755 --- a/.docker/docker-tests.sh +++ b/.docker/pharo/docker-tests.sh @@ -56,7 +56,7 @@ docker buildx build --tag launchpad:sut docker/pharo print_info "Building examples image" docker buildx build \ --tag launchpad-examples:sut \ - --file .docker/Dockerfile \ + --file .docker/pharo/Dockerfile \ . print_info "Running basic test" diff --git a/.github/workflows/docker-tests.yml b/.github/workflows/docker-tests.yml index 0bf4474..ffd34a6 100644 --- a/.github/workflows/docker-tests.yml +++ b/.github/workflows/docker-tests.yml @@ -10,4 +10,4 @@ jobs: with: fetch-depth: 2 - name: Run tests using Docker - run: ./.docker/docker-tests.sh + run: ./.docker/pharo/docker-tests.sh diff --git a/docker/gs64/Dockerfile b/docker/gs64/Dockerfile new file mode 100644 index 0000000..b4a3f97 --- /dev/null +++ b/docker/gs64/Dockerfile @@ -0,0 +1,7 @@ +FROM ghcr.io/ba-st/gs64-gem:v3.7.0 + +COPY --chown=gemstone:users ./launchpad* ./ +RUN set -eu; \ + ln -s /opt/gemstone/launchpad /usr/local/bin/launchpad; \ + chmod a+x /usr/local/bin/launchpad*; \ + true diff --git a/docker/gs64/launchpad b/docker/gs64/launchpad new file mode 100755 index 0000000..7399686 --- /dev/null +++ b/docker/gs64/launchpad @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +readonly SYSTEM_USER_PASSWORD="${GS64_SYSTEM_USER_PASSWORD:-swordfish}" +readonly STONE_NAME="${GS64_STONE_SERVICE_NAME:-gs64stone}" + +echo <> .topazini +set gemstone !@${GS64_STONE_HOSTNAME}!${STONE_NAME} user SystemUser pass ${SYSTEM_USER_PASSWORD} +iferror exit 1 +login +doit + CommandLineHandler activateWith: CommandLineArguments new +% +exit 0 +EOF + +exec topaz -l -- launchpad "$@" From f8f4d54a9b5f286bfba002bcc5d2a5528d375442 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 14:14:20 -0300 Subject: [PATCH 03/25] Update scripts --- .docker/gs64/docker-tests.sh | 69 ++++++++++++++++++------------------ docker/gs64/launchpad | 52 ++++++++++++++++++++++++++- 2 files changed, 86 insertions(+), 35 deletions(-) diff --git a/.docker/gs64/docker-tests.sh b/.docker/gs64/docker-tests.sh index b7754df..b7cd822 100755 --- a/.docker/gs64/docker-tests.sh +++ b/.docker/gs64/docker-tests.sh @@ -7,61 +7,61 @@ readonly ANSI_BLUE="\\033[34m" readonly ANSI_RESET="\\033[0m" function print_info() { - if [ -t 1 ]; then - printf "${ANSI_BOLD}${ANSI_BLUE}%s${ANSI_RESET}\\n" "$1" - else - echo "$1" - fi + if [ -t 1 ]; then + printf "${ANSI_BOLD}${ANSI_BLUE}%s${ANSI_RESET}\\n" "$1" + else + echo "$1" + fi } function print_success() { - if [ -t 1 ]; then - printf "${ANSI_BOLD}${ANSI_GREEN}%s${ANSI_RESET}\\n" "$1" - else - echo "$1" - fi + if [ -t 1 ]; then + printf "${ANSI_BOLD}${ANSI_GREEN}%s${ANSI_RESET}\\n" "$1" + else + echo "$1" + fi } function print_error() { - if [ -t 1 ]; then - printf "${ANSI_BOLD}${ANSI_RED}%s${ANSI_RESET}\\n" "$1" 1>&2 - else - echo "$1" 1>&2 - fi + if [ -t 1 ]; then + printf "${ANSI_BOLD}${ANSI_RED}%s${ANSI_RESET}\\n" "$1" 1>&2 + else + echo "$1" 1>&2 + fi } function executeWithArguments() { - rm -rf logs out err - LAST_ARGUMENTS=$* - "$@" > out 2> err || true + rm -rf logs out err + LAST_ARGUMENTS=$* + "$@" > out 2> err || true } function assertOutputIncludesMessage() { - local message=$1 - local output=$2 - - if [ "$(grep -c "$message" "$output")" -eq 0 ]; then - print_error "Expected std$output to have: '$message' when invoked with $LAST_ARGUMENTS" - print_info "Output contents" - cat "$output" - exit 1 - fi + local message=$1 + local output=$2 + + if [ "$(grep -c "$message" "$output")" -eq 0 ]; then + print_error "Expected std$output to have: '$message' when invoked with $LAST_ARGUMENTS" + print_info "Output contents" + cat "$output" + exit 1 + fi } set -e print_info "Creating network" -docker network prune --force +docker network rm --force launchpad-net docker network create --attachable launchpad-net print_info "Starting stone" docker run --rm --detach --name gs64-stone \ - -e TZ="America/Argentina/Buenos_Aires" \ - --cap-add=SYS_RESOURCE \ - --network=launchpad-net \ - --volume=$PWD:/opt/gemstone/projects/Launchpad:ro \ - --volume=$PWD/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ - ghcr.io/ba-st/gs64-rowan:v3.7.0 + -e TZ="America/Argentina/Buenos_Aires" \ + --cap-add=SYS_RESOURCE \ + --network=launchpad-net \ + --volume=$PWD:/opt/gemstone/projects/Launchpad:ro \ + --volume=$PWD/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ + ghcr.io/ba-st/gs64-rowan:v3.7.0 sleep 1 print_info "Loading Launchpad in the stone" @@ -149,3 +149,4 @@ print_success "OK" print_info "Stopping stone" docker stop gs64-stone +docker network rm --force launchpad-net diff --git a/docker/gs64/launchpad b/docker/gs64/launchpad index 7399686..536a8f2 100755 --- a/docker/gs64/launchpad +++ b/docker/gs64/launchpad @@ -1,5 +1,9 @@ #!/usr/bin/env bash +# Configure NETLDI service database +echo "${NETLDI_SERVICE_NAME} ${NETLDI_PORT}/tcp # GemStone - Netldi" >> /etc/services + +# Prepare Launchpad topaz input script readonly SYSTEM_USER_PASSWORD="${GS64_SYSTEM_USER_PASSWORD:-swordfish}" readonly STONE_NAME="${GS64_STONE_SERVICE_NAME:-gs64stone}" @@ -13,4 +17,50 @@ doit exit 0 EOF -exec topaz -l -- launchpad "$@" +# Ensure write permissions +NEED_WRITE_PERMISSION=( + "${GEMSTONE_GLOBAL_DIR}/locks/" + "${GEMSTONE_LOG_DIR}/" +) + +for path in "${NEED_WRITE_PERMISSION[@]}"; do + if ! gosu "${GS_USER}" test -w "$path"; then + chown "${GS_UID}:${GS_GID}" "$path" + chmod ug+w "$path" + fi +done + +pid=0 + +termination_handler() { + exit_status=0 + if [ $pid -ne 0 ]; then + echo 'SIGTERM received, shutting down the gem' + kill "$pid" + stopnetldi + wait "$pid" + exit_status=$? + fi + exit "$exit_status" +} + +trap 'termination_handler' SIGTERM + +# start GemStone services +# shellcheck disable=SC2086 +gosu "${GS_USER}" startnetldi \ + -g \ + -a "${GS_USER}" \ + -n \ + -P "${NETLDI_PORT}" \ + -l "${GEMSTONE_LOG_DIR}/${NETLDI_SERVICE_NAME}.log" \ + -D "${GEMSTONE_LOG_DIR}" \ + ${NETLDI_ARGS:-} \ + "${NETLDI_SERVICE_NAME}" + +# list GemStone services +gslist -cvl + +gosu "${GS_USER}" topaz -l -- launchpad "$@" +pid="$!" +wait "$pid" From f39d936276af140940b3c2bd77efdec05de98b3a Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 14:28:25 -0300 Subject: [PATCH 04/25] Split scripts --- docker/gs64/Dockerfile | 1 + docker/gs64/launchpad | 51 ++------------------------------------- docker/gs64/launchpad-gem | 49 +++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 49 deletions(-) create mode 100755 docker/gs64/launchpad-gem diff --git a/docker/gs64/Dockerfile b/docker/gs64/Dockerfile index b4a3f97..d5d164f 100644 --- a/docker/gs64/Dockerfile +++ b/docker/gs64/Dockerfile @@ -3,5 +3,6 @@ FROM ghcr.io/ba-st/gs64-gem:v3.7.0 COPY --chown=gemstone:users ./launchpad* ./ RUN set -eu; \ ln -s /opt/gemstone/launchpad /usr/local/bin/launchpad; \ + ln -s /opt/gemstone/launchpad-gem /usr/local/bin/launchpad-gem; \ chmod a+x /usr/local/bin/launchpad*; \ true diff --git a/docker/gs64/launchpad b/docker/gs64/launchpad index 536a8f2..6ec4325 100755 --- a/docker/gs64/launchpad +++ b/docker/gs64/launchpad @@ -1,22 +1,7 @@ #!/usr/bin/env bash -# Configure NETLDI service database echo "${NETLDI_SERVICE_NAME} ${NETLDI_PORT}/tcp # GemStone - Netldi" >> /etc/services -# Prepare Launchpad topaz input script -readonly SYSTEM_USER_PASSWORD="${GS64_SYSTEM_USER_PASSWORD:-swordfish}" -readonly STONE_NAME="${GS64_STONE_SERVICE_NAME:-gs64stone}" - -echo <> .topazini -set gemstone !@${GS64_STONE_HOSTNAME}!${STONE_NAME} user SystemUser pass ${SYSTEM_USER_PASSWORD} -iferror exit 1 -login -doit - CommandLineHandler activateWith: CommandLineArguments new -% -exit 0 -EOF - # Ensure write permissions NEED_WRITE_PERMISSION=( "${GEMSTONE_GLOBAL_DIR}/locks/" @@ -30,37 +15,5 @@ for path in "${NEED_WRITE_PERMISSION[@]}"; do fi done -pid=0 - -termination_handler() { - exit_status=0 - if [ $pid -ne 0 ]; then - echo 'SIGTERM received, shutting down the gem' - kill "$pid" - stopnetldi - wait "$pid" - exit_status=$? - fi - exit "$exit_status" -} - -trap 'termination_handler' SIGTERM - -# start GemStone services -# shellcheck disable=SC2086 -gosu "${GS_USER}" startnetldi \ - -g \ - -a "${GS_USER}" \ - -n \ - -P "${NETLDI_PORT}" \ - -l "${GEMSTONE_LOG_DIR}/${NETLDI_SERVICE_NAME}.log" \ - -D "${GEMSTONE_LOG_DIR}" \ - ${NETLDI_ARGS:-} \ - "${NETLDI_SERVICE_NAME}" - -# list GemStone services -gslist -cvl - -gosu "${GS_USER}" topaz -l -- launchpad "$@" -pid="$!" -wait "$pid" +# Run as GS_USER +exec gosu "${GS_USER}" "${GEMSTONE_GLOBAL_DIR}/launchpad-gem" "$@" diff --git a/docker/gs64/launchpad-gem b/docker/gs64/launchpad-gem new file mode 100755 index 0000000..5842a67 --- /dev/null +++ b/docker/gs64/launchpad-gem @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +# Prepare Launchpad topaz input script +readonly SYSTEM_USER_PASSWORD="${GS64_SYSTEM_USER_PASSWORD:-swordfish}" +readonly STONE_NAME="${GS64_STONE_SERVICE_NAME:-gs64stone}" + +echo <> .topazini +set gemstone !@${GS64_STONE_HOSTNAME}!${STONE_NAME} user SystemUser pass ${SYSTEM_USER_PASSWORD} +iferror exit 1 +login +doit + CommandLineHandler activateWith: CommandLineArguments new +% +exit 0 +EOF + +pid=0 + +termination_handler() { + exit_status=0 + if [ $pid -ne 0 ]; then + echo 'SIGTERM received, shutting down the gem' + kill "$pid" + stopnetldi + wait "$pid" + exit_status=$? + fi + exit "$exit_status" +} + +trap 'termination_handler' SIGTERM + +# shellcheck disable=SC2086 +startnetldi \ + -g \ + -a "${GS_USER}" \ + -n \ + -P "${NETLDI_PORT}" \ + -l "${GEMSTONE_LOG_DIR}/${NETLDI_SERVICE_NAME}.log" \ + -D "${GEMSTONE_LOG_DIR}" \ + ${NETLDI_ARGS:-} \ + "${NETLDI_SERVICE_NAME}" + +# list GemStone services +gslist -cvl + +topaz -l -- launchpad "$@" & +pid="$!" +wait "$pid" From e4bfa7cbcb024b8594329f8db551334294b1a303 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 14:49:37 -0300 Subject: [PATCH 05/25] Update script generation --- docker/gs64/launchpad-gem | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docker/gs64/launchpad-gem b/docker/gs64/launchpad-gem index 5842a67..50ed8ed 100755 --- a/docker/gs64/launchpad-gem +++ b/docker/gs64/launchpad-gem @@ -4,15 +4,15 @@ readonly SYSTEM_USER_PASSWORD="${GS64_SYSTEM_USER_PASSWORD:-swordfish}" readonly STONE_NAME="${GS64_STONE_SERVICE_NAME:-gs64stone}" -echo <> .topazini -set gemstone !@${GS64_STONE_HOSTNAME}!${STONE_NAME} user SystemUser pass ${SYSTEM_USER_PASSWORD} -iferror exit 1 -login -doit - CommandLineHandler activateWith: CommandLineArguments new -% -exit 0 -EOF +set +o histexpand +echo "set gemstone !@${GS64_STONE_HOSTNAME}!${STONE_NAME} user SystemUser pass ${SYSTEM_USER_PASSWORD}" >> .topazini +echo "iferror exit 1" >> .topazini +echo "login" >> .topazini +echo "doit" >> .topazini +echo " CommandLineHandler activateWith: CommandLineArguments new" >> .topazini +echo "%" >> .topazini +echo "exit 0" >> .topazini +set -o histexpand pid=0 From 7e536ad907131c8b2407156da2449c1d0d97ea47 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 15:06:00 -0300 Subject: [PATCH 06/25] Update script --- docker/gs64/launchpad-gem | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/docker/gs64/launchpad-gem b/docker/gs64/launchpad-gem index 50ed8ed..d14f42a 100755 --- a/docker/gs64/launchpad-gem +++ b/docker/gs64/launchpad-gem @@ -4,14 +4,16 @@ readonly SYSTEM_USER_PASSWORD="${GS64_SYSTEM_USER_PASSWORD:-swordfish}" readonly STONE_NAME="${GS64_STONE_SERVICE_NAME:-gs64stone}" +set -e +readonly LAUNCHPAD_TOPAZ_SCRIPT="${GEMSTONE_GLOBAL_DIR}/data/launchpad-start.tpz" set +o histexpand -echo "set gemstone !@${GS64_STONE_HOSTNAME}!${STONE_NAME} user SystemUser pass ${SYSTEM_USER_PASSWORD}" >> .topazini -echo "iferror exit 1" >> .topazini -echo "login" >> .topazini -echo "doit" >> .topazini -echo " CommandLineHandler activateWith: CommandLineArguments new" >> .topazini -echo "%" >> .topazini -echo "exit 0" >> .topazini +echo "set gemstone !@${GS64_STONE_HOSTNAME}!${STONE_NAME} user SystemUser pass ${SYSTEM_USER_PASSWORD}" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" +echo "iferror exit 1" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" +echo "login" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" +echo "doit" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" +echo " CommandLineHandler activateWith: CommandLineArguments new" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" +echo "%" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" +echo "exit 0" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" set -o histexpand pid=0 @@ -44,6 +46,6 @@ startnetldi \ # list GemStone services gslist -cvl -topaz -l -- launchpad "$@" & +topaz -l -S "${LAUNCHPAD_TOPAZ_SCRIPT}" -- launchpad "$@" & pid="$!" wait "$pid" From e37ed03a705a968b549303148d4fdb4e63de717e Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 15:09:51 -0300 Subject: [PATCH 07/25] Map gemstone key --- .docker/gs64/docker-tests.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.docker/gs64/docker-tests.sh b/.docker/gs64/docker-tests.sh index b7cd822..238d1e4 100755 --- a/.docker/gs64/docker-tests.sh +++ b/.docker/gs64/docker-tests.sh @@ -78,11 +78,13 @@ docker buildx build --tag launchpad-gs64:sut docker/gs64 print_info "Running basic test" executeWithArguments docker run \ - -e TZ="America/Argentina/Buenos_Aires" \ - -e GS64_STONE_HOSTNAME="gs64-stone" \ - --network=launchpad-net \ - --cap-add=SYS_RESOURCE \ - launchpad-examples-gs64:sut + -e TZ="America/Argentina/Buenos_Aires" \ + -e GS64_STONE_HOSTNAME="gs64-stone" \ + --cap-add=SYS_RESOURCE \ + --network=launchpad-net \ + --volume=$PWD/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ + --volume=$PWD/.docker/gs64/gemstone.key:/opt/gemstone/product/sys/gemstone.key:ro \ + launchpad-examples-gs64:sut assertOutputIncludesMessage '[INFO]' out assertOutputIncludesMessage "Hi Mr. DJ!" out print_success "OK" From f77dd2dffb644433db764f93fcda28dd0a53a7d4 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 15:11:42 -0300 Subject: [PATCH 08/25] Add .gitignore --- .docker/gs64/.gitignore | 1 + .gitignore | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 .docker/gs64/.gitignore create mode 100644 .gitignore diff --git a/.docker/gs64/.gitignore b/.docker/gs64/.gitignore new file mode 100644 index 0000000..8d57495 --- /dev/null +++ b/.docker/gs64/.gitignore @@ -0,0 +1 @@ +gemstone.key diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f581dd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +err +out From 64cd635c1fb3e09a6fdbb47a023c4db9d1150d85 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 15:14:31 -0300 Subject: [PATCH 09/25] move keyfile mount to stone container --- .docker/gs64/docker-tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.docker/gs64/docker-tests.sh b/.docker/gs64/docker-tests.sh index 238d1e4..939f60c 100755 --- a/.docker/gs64/docker-tests.sh +++ b/.docker/gs64/docker-tests.sh @@ -61,6 +61,7 @@ docker run --rm --detach --name gs64-stone \ --network=launchpad-net \ --volume=$PWD:/opt/gemstone/projects/Launchpad:ro \ --volume=$PWD/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ + --volume=$PWD/.docker/gs64/gemstone.key:/opt/gemstone/product/sys/gemstone.key:ro \ ghcr.io/ba-st/gs64-rowan:v3.7.0 sleep 1 @@ -83,7 +84,6 @@ executeWithArguments docker run \ --cap-add=SYS_RESOURCE \ --network=launchpad-net \ --volume=$PWD/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ - --volume=$PWD/.docker/gs64/gemstone.key:/opt/gemstone/product/sys/gemstone.key:ro \ launchpad-examples-gs64:sut assertOutputIncludesMessage '[INFO]' out assertOutputIncludesMessage "Hi Mr. DJ!" out From 4d8c9e9d306cbeef0f9089006cbbd8298ac7e8db Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 15:36:36 -0300 Subject: [PATCH 10/25] Split topaz scripts --- docker/gs64/Dockerfile | 1 + docker/gs64/command-line-handler.tpz | 4 ++++ docker/gs64/launchpad-gem | 8 +------- 3 files changed, 6 insertions(+), 7 deletions(-) create mode 100644 docker/gs64/command-line-handler.tpz diff --git a/docker/gs64/Dockerfile b/docker/gs64/Dockerfile index d5d164f..9471368 100644 --- a/docker/gs64/Dockerfile +++ b/docker/gs64/Dockerfile @@ -1,6 +1,7 @@ FROM ghcr.io/ba-st/gs64-gem:v3.7.0 COPY --chown=gemstone:users ./launchpad* ./ +COPY --chown=gemstone:users ./command-line-handler.tpz ./command-line-handler.tpz RUN set -eu; \ ln -s /opt/gemstone/launchpad /usr/local/bin/launchpad; \ ln -s /opt/gemstone/launchpad-gem /usr/local/bin/launchpad-gem; \ diff --git a/docker/gs64/command-line-handler.tpz b/docker/gs64/command-line-handler.tpz new file mode 100644 index 0000000..72a486e --- /dev/null +++ b/docker/gs64/command-line-handler.tpz @@ -0,0 +1,4 @@ +iferror exit 1 +login +send LaunchpadCommandLineHandler activateWith: CommandLineArguments new +exit 0 diff --git a/docker/gs64/launchpad-gem b/docker/gs64/launchpad-gem index d14f42a..efc9f11 100755 --- a/docker/gs64/launchpad-gem +++ b/docker/gs64/launchpad-gem @@ -8,12 +8,6 @@ set -e readonly LAUNCHPAD_TOPAZ_SCRIPT="${GEMSTONE_GLOBAL_DIR}/data/launchpad-start.tpz" set +o histexpand echo "set gemstone !@${GS64_STONE_HOSTNAME}!${STONE_NAME} user SystemUser pass ${SYSTEM_USER_PASSWORD}" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" -echo "iferror exit 1" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" -echo "login" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" -echo "doit" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" -echo " CommandLineHandler activateWith: CommandLineArguments new" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" -echo "%" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" -echo "exit 0" >> "${LAUNCHPAD_TOPAZ_SCRIPT}" set -o histexpand pid=0 @@ -46,6 +40,6 @@ startnetldi \ # list GemStone services gslist -cvl -topaz -l -S "${LAUNCHPAD_TOPAZ_SCRIPT}" -- launchpad "$@" & +topaz -l -I "${LAUNCHPAD_TOPAZ_SCRIPT}" -S "${GEMSTONE_GLOBAL_DIR}/command-line-handler.tpz" -- launchpad "$@" & pid="$!" wait "$pid" From b91b4b61aa78bb8db4a43f3a23b966e8ac561551 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 15:50:20 -0300 Subject: [PATCH 11/25] Update script --- docker/gs64/command-line-handler.tpz | 2 +- .../Launchpad-GS64-Extensions/CommandLineArguments.class.st | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docker/gs64/command-line-handler.tpz b/docker/gs64/command-line-handler.tpz index 72a486e..781902d 100644 --- a/docker/gs64/command-line-handler.tpz +++ b/docker/gs64/command-line-handler.tpz @@ -1,4 +1,4 @@ iferror exit 1 login -send LaunchpadCommandLineHandler activateWith: CommandLineArguments new +send LaunchpadCommandLineHandler activateWith: (CommandLineArguments new copyAfter: '--') exit 0 diff --git a/source/Launchpad-GS64-Extensions/CommandLineArguments.class.st b/source/Launchpad-GS64-Extensions/CommandLineArguments.class.st index a523304..e314192 100644 --- a/source/Launchpad-GS64-Extensions/CommandLineArguments.class.st +++ b/source/Launchpad-GS64-Extensions/CommandLineArguments.class.st @@ -36,6 +36,12 @@ CommandLineArguments >> arguments [ ^ arguments ] +{ #category : #copying } +CommandLineArguments >> copyAfter: argument [ + + ^ self class withArguments: (arguments copyAfter: argument) +] + { #category : #copying } CommandLineArguments >> copySubcommand [ From cf6d330a8814620efbd9e62f078278cdf2cd6d9a Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 15:56:06 -0300 Subject: [PATCH 12/25] Fix command line handler activation script --- docker/gs64/command-line-handler.tpz | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docker/gs64/command-line-handler.tpz b/docker/gs64/command-line-handler.tpz index 781902d..7eca0f7 100644 --- a/docker/gs64/command-line-handler.tpz +++ b/docker/gs64/command-line-handler.tpz @@ -1,4 +1,6 @@ iferror exit 1 login -send LaunchpadCommandLineHandler activateWith: (CommandLineArguments new copyAfter: '--') +doit + LaunchpadCommandLineHandler activateWith: (CommandLineArguments new copyAfter: '--') +% exit 0 From 6b496fd449e59d5c8ca9ccb1d3090f7bc9dcccd0 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 16:14:11 -0300 Subject: [PATCH 13/25] Quite output --- .docker/gs64/docker-tests.sh | 8 ++++---- docker/gs64/launchpad-gem | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.docker/gs64/docker-tests.sh b/.docker/gs64/docker-tests.sh index 939f60c..2cc8e0d 100755 --- a/.docker/gs64/docker-tests.sh +++ b/.docker/gs64/docker-tests.sh @@ -59,9 +59,9 @@ docker run --rm --detach --name gs64-stone \ -e TZ="America/Argentina/Buenos_Aires" \ --cap-add=SYS_RESOURCE \ --network=launchpad-net \ - --volume=$PWD:/opt/gemstone/projects/Launchpad:ro \ - --volume=$PWD/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ - --volume=$PWD/.docker/gs64/gemstone.key:/opt/gemstone/product/sys/gemstone.key:ro \ + --volume="$PWD":/opt/gemstone/projects/Launchpad:ro \ + --volume="$PWD"/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ + --volume="$PWD"/.docker/gs64/gemstone.key:/opt/gemstone/product/sys/gemstone.key:ro \ ghcr.io/ba-st/gs64-rowan:v3.7.0 sleep 1 @@ -83,7 +83,7 @@ executeWithArguments docker run \ -e GS64_STONE_HOSTNAME="gs64-stone" \ --cap-add=SYS_RESOURCE \ --network=launchpad-net \ - --volume=$PWD/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ + --volume="$PWD"/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ launchpad-examples-gs64:sut assertOutputIncludesMessage '[INFO]' out assertOutputIncludesMessage "Hi Mr. DJ!" out diff --git a/docker/gs64/launchpad-gem b/docker/gs64/launchpad-gem index efc9f11..b18c24e 100755 --- a/docker/gs64/launchpad-gem +++ b/docker/gs64/launchpad-gem @@ -35,11 +35,11 @@ startnetldi \ -l "${GEMSTONE_LOG_DIR}/${NETLDI_SERVICE_NAME}.log" \ -D "${GEMSTONE_LOG_DIR}" \ ${NETLDI_ARGS:-} \ - "${NETLDI_SERVICE_NAME}" + "${NETLDI_SERVICE_NAME}" >> "${GEMSTONE_LOG_DIR}/startnetldi.log" # list GemStone services -gslist -cvl +gslist -cvl >> "${GEMSTONE_LOG_DIR}/startnetldi.log" -topaz -l -I "${LAUNCHPAD_TOPAZ_SCRIPT}" -S "${GEMSTONE_GLOBAL_DIR}/command-line-handler.tpz" -- launchpad "$@" & +topaz -l -q -I "${LAUNCHPAD_TOPAZ_SCRIPT}" -S "${GEMSTONE_GLOBAL_DIR}/command-line-handler.tpz" -- launchpad "$@" & pid="$!" wait "$pid" From 257652b39034769b1ba426a4dba7450d2a3ac616 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 16:23:10 -0300 Subject: [PATCH 14/25] Add more tests --- .docker/gs64/docker-tests.sh | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/.docker/gs64/docker-tests.sh b/.docker/gs64/docker-tests.sh index 2cc8e0d..dc11de9 100755 --- a/.docker/gs64/docker-tests.sh +++ b/.docker/gs64/docker-tests.sh @@ -51,7 +51,7 @@ function assertOutputIncludesMessage() { set -e print_info "Creating network" -docker network rm --force launchpad-net +docker network rm launchpad-net docker network create --attachable launchpad-net print_info "Starting stone" @@ -77,28 +77,26 @@ docker buildx build --tag launchpad-gs64:sut docker/gs64 --file .docker/gs64/Dockerfile \ . -print_info "Running basic test" -executeWithArguments docker run \ +function run_launchpad_gem(){ + executeWithArguments docker run \ -e TZ="America/Argentina/Buenos_Aires" \ -e GS64_STONE_HOSTNAME="gs64-stone" \ --cap-add=SYS_RESOURCE \ --network=launchpad-net \ --volume="$PWD"/.docker/gs64/gem.conf:/opt/gemstone/conf/gem.conf \ - launchpad-examples-gs64:sut + launchpad-examples-gs64:sut "$@" +} + +print_info "Running basic test" +run_launchpad_gem assertOutputIncludesMessage '[INFO]' out assertOutputIncludesMessage "Hi Mr. DJ!" out print_success "OK" -# print_info "Running basic test with structured logging" -# executeWithArguments docker run -e LAUNCHPAD__LOG_FORMAT='json' launchpad-examples:sut -# assertOutputIncludesMessage '"level":"INFO"' out -# assertOutputIncludesMessage "Hi Mr. DJ!" out -# print_success "OK" - -# print_info "Running --version test" -# executeWithArguments docker run launchpad-examples:sut launchpad --version -# assertOutputIncludesMessage "Launchpad" out -# print_success "OK" +print_info "Running --version test" +run_launchpad_gem launchpad --version +assertOutputIncludesMessage "Launchpad" out +print_success "OK" # print_info "Running launchpad-list test" # executeWithArguments docker run launchpad-examples:sut launchpad-list @@ -151,4 +149,4 @@ print_success "OK" print_info "Stopping stone" docker stop gs64-stone -docker network rm --force launchpad-net +docker network rm launchpad-net From 22b72e99839f0b4b9962eba2e5ddd411e2d0e315 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 16:36:09 -0300 Subject: [PATCH 15/25] Add more tests --- .docker/gs64/docker-tests.sh | 92 +++++++++++++++++------------------- 1 file changed, 43 insertions(+), 49 deletions(-) diff --git a/.docker/gs64/docker-tests.sh b/.docker/gs64/docker-tests.sh index dc11de9..46c95f5 100755 --- a/.docker/gs64/docker-tests.sh +++ b/.docker/gs64/docker-tests.sh @@ -51,7 +51,9 @@ function assertOutputIncludesMessage() { set -e print_info "Creating network" -docker network rm launchpad-net +if docker network inspect launchpad-net > /dev/null 2>&1 ;then + docker network rm launchpad-net +fi docker network create --attachable launchpad-net print_info "Starting stone" @@ -98,55 +100,47 @@ run_launchpad_gem launchpad --version assertOutputIncludesMessage "Launchpad" out print_success "OK" -# print_info "Running launchpad-list test" -# executeWithArguments docker run launchpad-examples:sut launchpad-list -# assertOutputIncludesMessage "broken greeter" out -# print_success "OK" - -# print_info "Running launchpad-list --verbose test" -# executeWithArguments docker run launchpad-examples:sut launchpad-list --verbose -# assertOutputIncludesMessage "broken v0.0.1" out -# assertOutputIncludesMessage "greeter v1.0.0" out -# print_success "OK" - -# print_info "Running launchpad-explain test" -# executeWithArguments docker run launchpad-examples:sut launchpad-explain broken -# assertOutputIncludesMessage "broken \[v0.0.1\] - A broken application" out -# executeWithArguments docker run launchpad-examples:sut launchpad-explain greeter -# assertOutputIncludesMessage "greeter \[v1.0.0\] - A greetings application" out -# executeWithArguments docker run launchpad-examples:sut launchpad-explain -# assertOutputIncludesMessage "\[ERROR\] Missing application name or option." err -# print_success "OK" - -# print_info "Running launchpad-start greeter test" -# executeWithArguments docker run launchpad-examples:sut launchpad-start greeter --name=Juan -# assertOutputIncludesMessage "Hi Juan!" out -# print_success " Just name, OK" -# executeWithArguments docker run launchpad-examples:sut launchpad-start greeter --name=Julia --title=Miss -# assertOutputIncludesMessage "Hi Miss Julia!" out -# print_success " Name and title, OK" -# executeWithArguments docker run launchpad-examples:sut launchpad-start greeter --title=Miss -# assertOutputIncludesMessage "\[ERROR\] \"Name\" parameter not provided. You must provide one." err -# print_success " Missing name, OK" -# executeWithArguments docker run launchpad-examples:sut launchpad-start greeter -# assertOutputIncludesMessage "\[ERROR\] \"Name\" parameter not provided. You must provide one." err -# print_success "OK" - -# print_info "Running launchpad-start broken test" -# executeWithArguments docker run launchpad-examples:sut launchpad-start broken --raise-error -# assertOutputIncludesMessage "\[INFO\] Obtaining configuration... \[DONE\]" out -# assertOutputIncludesMessage "\[ERROR\] Unexpected startup error: \"Doh!\"" err -# print_success "OK" - -# print_info "Running launchpad-start command server test" -# # broken app keeps running when passed and invalid option -# executeWithArguments docker run --rm --name=broken-running -d launchpad-examples:sut launchpad-start broken -wait -# sleep 1 -# rm -f out -# docker stop -t 30 broken-running > out -# assertOutputIncludesMessage "broken-running" out -# print_success "OK" +print_info "Running launchpad-list test" +run_launchpad_gem launchpad-list +assertOutputIncludesMessage "broken greeter" out +print_success "OK" + +print_info "Running launchpad-list --verbose test" +run_launchpad_gem launchpad-list --verbose +assertOutputIncludesMessage "broken v0.0.1" out +assertOutputIncludesMessage "greeter v1.0.0" out +print_success "OK" + +print_info "Running launchpad-explain test" +run_launchpad_gem launchpad-explain broken +assertOutputIncludesMessage "broken \[v0.0.1\] - A broken application" out +run_launchpad_gem launchpad-explain greeter +assertOutputIncludesMessage "greeter \[v1.0.0\] - A greetings application" out +run_launchpad_gem launchpad-explain +assertOutputIncludesMessage "\[ERROR\] Missing application name or option." err +print_success "OK" + +print_info "Running launchpad-start greeter test" +run_launchpad_gem launchpad-start greeter --name=Juan +assertOutputIncludesMessage "Hi Juan!" out +print_success " Just name, OK" +run_launchpad_gem launchpad-start greeter --name=Julia --title=Miss +assertOutputIncludesMessage "Hi Miss Julia!" out +print_success " Name and title, OK" +run_launchpad_gem launchpad-start greeter --title=Miss +assertOutputIncludesMessage "\[ERROR\] \"Name\" parameter not provided. You must provide one." err +print_success " Missing name, OK" +run_launchpad_gem launchpad-start greeter +assertOutputIncludesMessage "\[ERROR\] \"Name\" parameter not provided. You must provide one." err +print_success "OK" + +print_info "Running launchpad-start broken test" +run_launchpad_gem launchpad-start broken --raise-error +assertOutputIncludesMessage "\[INFO\] Obtaining configuration... \[DONE\]" out +assertOutputIncludesMessage "\[ERROR\] Unexpected startup error: \"Doh!\"" err +print_success "OK" print_info "Stopping stone" docker stop gs64-stone +print_info "Removing network" docker network rm launchpad-net From 55a1e9cc1297dc5ea2599d09e3488cde8f186ccf Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Wed, 1 Nov 2023 16:39:07 -0300 Subject: [PATCH 16/25] Fix tests --- .docker/gs64/docker-tests.sh | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.docker/gs64/docker-tests.sh b/.docker/gs64/docker-tests.sh index 46c95f5..2c6ae40 100755 --- a/.docker/gs64/docker-tests.sh +++ b/.docker/gs64/docker-tests.sh @@ -100,42 +100,42 @@ run_launchpad_gem launchpad --version assertOutputIncludesMessage "Launchpad" out print_success "OK" -print_info "Running launchpad-list test" -run_launchpad_gem launchpad-list +print_info "Running launchpad list test" +run_launchpad_gem launchpad list assertOutputIncludesMessage "broken greeter" out print_success "OK" -print_info "Running launchpad-list --verbose test" -run_launchpad_gem launchpad-list --verbose +print_info "Running launchpad list --verbose test" +run_launchpad_gem launchpad list --verbose assertOutputIncludesMessage "broken v0.0.1" out assertOutputIncludesMessage "greeter v1.0.0" out print_success "OK" -print_info "Running launchpad-explain test" -run_launchpad_gem launchpad-explain broken +print_info "Running launchpad explain test" +run_launchpad_gem launchpad explain broken assertOutputIncludesMessage "broken \[v0.0.1\] - A broken application" out -run_launchpad_gem launchpad-explain greeter +run_launchpad_gem launchpad explain greeter assertOutputIncludesMessage "greeter \[v1.0.0\] - A greetings application" out -run_launchpad_gem launchpad-explain +run_launchpad_gem launchpad explain assertOutputIncludesMessage "\[ERROR\] Missing application name or option." err print_success "OK" -print_info "Running launchpad-start greeter test" -run_launchpad_gem launchpad-start greeter --name=Juan +print_info "Running launchpad start greeter test" +run_launchpad_gem launchpad start greeter --name=Juan assertOutputIncludesMessage "Hi Juan!" out print_success " Just name, OK" -run_launchpad_gem launchpad-start greeter --name=Julia --title=Miss +run_launchpad_gem launchpad start greeter --name=Julia --title=Miss assertOutputIncludesMessage "Hi Miss Julia!" out print_success " Name and title, OK" -run_launchpad_gem launchpad-start greeter --title=Miss +run_launchpad_gem launchpad start greeter --title=Miss assertOutputIncludesMessage "\[ERROR\] \"Name\" parameter not provided. You must provide one." err print_success " Missing name, OK" -run_launchpad_gem launchpad-start greeter +run_launchpad_gem launchpad start greeter assertOutputIncludesMessage "\[ERROR\] \"Name\" parameter not provided. You must provide one." err print_success "OK" -print_info "Running launchpad-start broken test" -run_launchpad_gem launchpad-start broken --raise-error +print_info "Running launchpad start broken test" +run_launchpad_gem launchpad start broken --raise-error assertOutputIncludesMessage "\[INFO\] Obtaining configuration... \[DONE\]" out assertOutputIncludesMessage "\[ERROR\] Unexpected startup error: \"Doh!\"" err print_success "OK" From 91fccc7f736c892689957271e80c7447776553cf Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Thu, 2 Nov 2023 15:59:43 -0300 Subject: [PATCH 17/25] Add actions for testing in GS64 Update actions --- .../workflows/.binary-stack-serialization.yml | 13 ++++++++---- .github/workflows/docker-build.yml | 2 -- .github/workflows/docker-tests.yml | 9 ++++---- .github/workflows/loading-groups.yml | 18 +++++++++++----- .github/workflows/loading-gs64-components.yml | 21 +++++++++++++++++++ .github/workflows/markdown-lint.yml | 5 ++++- .github/workflows/notify.yml | 6 +----- .github/workflows/shellcheck.yml | 6 +++--- .github/workflows/unit-tests-gs64.yml | 16 ++++++++++++++ .github/workflows/unit-tests.yml | 15 ++++++++----- README.md | 9 +++++++- 11 files changed, 90 insertions(+), 30 deletions(-) create mode 100644 .github/workflows/loading-gs64-components.yml create mode 100644 .github/workflows/unit-tests-gs64.yml diff --git a/.github/workflows/.binary-stack-serialization.yml b/.github/workflows/.binary-stack-serialization.yml index bdffab1..c33eba9 100644 --- a/.github/workflows/.binary-stack-serialization.yml +++ b/.github/workflows/.binary-stack-serialization.yml @@ -1,14 +1,19 @@ name: Binary Stack Serialization Tests - -on: [push,pull_request,workflow_dispatch] - +on: + - push + - pull_request + - workflow_dispatch jobs: unit-tests: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - smalltalk: [ Pharo64-11, Pharo64-10, Pharo64-9.0, Pharo64-8.0 ] + smalltalk: + - Pharo64-11 + - Pharo64-10 + - Pharo64-9.0 + - Pharo64-8.0 name: ${{ matrix.smalltalk }} steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 33236a3..3468fa6 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -1,5 +1,4 @@ name: Build and Publish Docker Images - on: workflow_dispatch: push: @@ -8,7 +7,6 @@ on: tags: - 'v*.*.*' pull_request: - jobs: build_and_publish: runs-on: ubuntu-latest diff --git a/.github/workflows/docker-tests.yml b/.github/workflows/docker-tests.yml index ffd34a6..f56fa7b 100644 --- a/.github/workflows/docker-tests.yml +++ b/.github/workflows/docker-tests.yml @@ -1,7 +1,8 @@ -name: Docker Tests - -on: [push,pull_request,workflow_dispatch] - +name: Pharo Docker Tests +on: + - push + - pull_request + - workflow_dispatch jobs: unit-tests: runs-on: ubuntu-latest diff --git a/.github/workflows/loading-groups.yml b/.github/workflows/loading-groups.yml index 0e4dd83..c94dbc7 100644 --- a/.github/workflows/loading-groups.yml +++ b/.github/workflows/loading-groups.yml @@ -1,15 +1,23 @@ name: Baseline Groups - -on: [push,pull_request,workflow_dispatch] - +on: + - push + - pull_request + - workflow_dispatch jobs: group-loading: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - smalltalk: [ Pharo64-11, Pharo64-10, Pharo64-9.0, Pharo64-8.0 ] - load-spec: [ deployment, examples, tools, sunit, development] + smalltalk: + - Pharo64-10 + - Pharo64-11 + load-spec: + - development + - deployment + - examples + - sunit + - tools name: ${{ matrix.smalltalk }} + ${{ matrix.load-spec }} steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/loading-gs64-components.yml b/.github/workflows/loading-gs64-components.yml new file mode 100644 index 0000000..df51ad2 --- /dev/null +++ b/.github/workflows/loading-gs64-components.yml @@ -0,0 +1,21 @@ +name: 'GS64 Components Loading' +on: + - push + - pull_request + - workflow_dispatch +jobs: + component-loading: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + load-spec: + - Deployment + name: GS64 + ${{ matrix.load-spec }} + steps: + - uses: actions/checkout@v3 + - name: Load component in image + uses: ba-st-actions/gs64-ci@v2 + with: + project_name: 'Launchpad' + load_spec: 'Launchpad-${{ matrix.load-spec }}' diff --git a/.github/workflows/markdown-lint.yml b/.github/workflows/markdown-lint.yml index fbb50fa..29b9002 100644 --- a/.github/workflows/markdown-lint.yml +++ b/.github/workflows/markdown-lint.yml @@ -1,5 +1,8 @@ name: Markdown Lint -on: [push,pull_request,workflow_dispatch] +on: + - push + - pull_request + - workflow_dispatch jobs: remark-lint: name: runner / markdownlint diff --git a/.github/workflows/notify.yml b/.github/workflows/notify.yml index bfe0828..b43382e 100644 --- a/.github/workflows/notify.yml +++ b/.github/workflows/notify.yml @@ -1,9 +1,5 @@ name: Release Notifications - -on: - release: - types: [published] - +on: workflow_dispatch jobs: notify: runs-on: ubuntu-latest diff --git a/.github/workflows/shellcheck.yml b/.github/workflows/shellcheck.yml index 1b3944d..20ddbdc 100644 --- a/.github/workflows/shellcheck.yml +++ b/.github/workflows/shellcheck.yml @@ -1,7 +1,7 @@ name: Shellcheck - -on: [push,pull_request] - +on: + - push + - pull_request jobs: shellcheck: runs-on: ubuntu-latest diff --git a/.github/workflows/unit-tests-gs64.yml b/.github/workflows/unit-tests-gs64.yml new file mode 100644 index 0000000..567ca81 --- /dev/null +++ b/.github/workflows/unit-tests-gs64.yml @@ -0,0 +1,16 @@ +name: 'GS64 Unit Tests' +on: + - push + - pull_request + - workflow_dispatch +jobs: + unit-tests: + runs-on: ubuntu-latest + name: GS64 Unit Tests + steps: + - uses: actions/checkout@v3 + - name: Load Image and Run Tests + uses: ba-st-actions/gs64-ci@v2 + with: + project_name: 'Launchpad' + run_tests: 'true' diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 4979740..aaca578 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -1,14 +1,19 @@ -name: Unit Tests - -on: [push,pull_request,workflow_dispatch] - +name: Pharo Unit Tests +on: + - push + - pull_request + - workflow_dispatch jobs: unit-tests: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - smalltalk: [ Pharo64-11, Pharo64-10, Pharo64-9.0, Pharo64-8.0 ] + smalltalk: + - Pharo64-10 + - Pharo64-11 + - Pharo64-9.0 + - Pharo64-8.0 name: ${{ matrix.smalltalk }} steps: - uses: actions/checkout@v3 diff --git a/README.md b/README.md index 57fda52..15be4b8 100644 --- a/README.md +++ b/README.md @@ -5,19 +5,26 @@ A command-line interface to start, list, and explain the applications available within the image. -[![Unit Tests](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests.yml) +[![Pharo Unit Tests](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests.yml) +[![GS64 - Unit Tests](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests-gs64.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests-gs64.yml) [![Docker Tests](https://github.com/ba-st/Launchpad/actions/workflows/docker-tests.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-tests.yml) [![Coverage Status](https://codecov.io/github/ba-st/Launchpad/coverage.svg?branch=release-candidate)](https://codecov.io/gh/ba-st/Launchpad/branch/release-candidate) + [![Baseline Groups](https://github.com/ba-st/Launchpad/actions/workflows/loading-groups.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/loading-groups.yml) +[![GS64 Components](https://github.com/ba-st/Launchpad/actions/workflows/loading-gs64-components.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/loading-gs64-components.yml) [![Docker Build](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml) [![Markdown Lint](https://github.com/ba-st/Launchpad/actions/workflows/markdown-lint.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/markdown-lint.yml) +[![Shellcheck](https://github.com/ba-st/Stargate/actions/workflows/shellcheck.yml/badge.svg)](https://github.com/ba-st/Stargate/actions/workflows/shellcheck.yml) [![GitHub release](https://img.shields.io/github/release/ba-st/Launchpad.svg)](https://github.com/ba-st/Launchpad/releases/latest) + [![Pharo 8.0](https://img.shields.io/badge/Pharo-8.0-informational)](https://pharo.org) [![Pharo 9.0](https://img.shields.io/badge/Pharo-9.0-informational)](https://pharo.org) [![Pharo 10](https://img.shields.io/badge/Pharo-10-informational)](https://pharo.org) [![Pharo 11](https://img.shields.io/badge/Pharo-11-informational)](https://pharo.org) +[![GS64 3.7.0](https://img.shields.io/badge/GS64-3.7.0-informational)](https://gemtalksystems.com/products/gs64/) + ## Quick links - [**Explore the docs**](docs/README.md) From 26b0326d07eb95554e1a6f0c9d7dfd0417af6c72 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Thu, 2 Nov 2023 16:47:10 -0300 Subject: [PATCH 18/25] Test new action version --- .github/workflows/unit-tests-gs64.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit-tests-gs64.yml b/.github/workflows/unit-tests-gs64.yml index 567ca81..d1cf6d8 100644 --- a/.github/workflows/unit-tests-gs64.yml +++ b/.github/workflows/unit-tests-gs64.yml @@ -10,7 +10,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Load Image and Run Tests - uses: ba-st-actions/gs64-ci@v2 + uses: ba-st-actions/gs64-ci@v2-test with: project_name: 'Launchpad' run_tests: 'true' From 52e990e1b3b747d7a8073222ab9ec6f9ddca1bbc Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Thu, 2 Nov 2023 17:12:55 -0300 Subject: [PATCH 19/25] Update CI version --- .github/workflows/unit-tests-gs64.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit-tests-gs64.yml b/.github/workflows/unit-tests-gs64.yml index d1cf6d8..ecea7de 100644 --- a/.github/workflows/unit-tests-gs64.yml +++ b/.github/workflows/unit-tests-gs64.yml @@ -10,7 +10,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Load Image and Run Tests - uses: ba-st-actions/gs64-ci@v2-test + uses: ba-st-actions/gs64-ci@release-candidate with: project_name: 'Launchpad' run_tests: 'true' From c141a0bbbcc735fd14421b1931aaf25975a4f4cf Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Thu, 2 Nov 2023 17:39:07 -0300 Subject: [PATCH 20/25] Restore v2 --- .github/workflows/unit-tests-gs64.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit-tests-gs64.yml b/.github/workflows/unit-tests-gs64.yml index ecea7de..567ca81 100644 --- a/.github/workflows/unit-tests-gs64.yml +++ b/.github/workflows/unit-tests-gs64.yml @@ -10,7 +10,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Load Image and Run Tests - uses: ba-st-actions/gs64-ci@release-candidate + uses: ba-st-actions/gs64-ci@v2 with: project_name: 'Launchpad' run_tests: 'true' From 3f140d3b103b57728a50277779e4dd3628f2a364 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Thu, 2 Nov 2023 17:54:50 -0300 Subject: [PATCH 21/25] Add GS 64 docker build and tests --- .github/workflows/docker-build-gs64.yml | 38 +++++++++++++++++++++++++ .github/workflows/docker-build.yml | 2 +- .github/workflows/docker-tests-gs64.yml | 14 +++++++++ README.md | 6 ++-- 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/docker-build-gs64.yml create mode 100644 .github/workflows/docker-tests-gs64.yml diff --git a/.github/workflows/docker-build-gs64.yml b/.github/workflows/docker-build-gs64.yml new file mode 100644 index 0000000..f8e01d4 --- /dev/null +++ b/.github/workflows/docker-build-gs64.yml @@ -0,0 +1,38 @@ +name: Build and Publish GS64 Docker Images +on: + workflow_dispatch: + push: + branches: + - '**' + tags: + - 'v*.*.*' + pull_request: +jobs: + build_and_publish: + runs-on: ubuntu-latest + name: Build and Publish Docker images + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Docker meta + id: docker_meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository_owner }}/launchpad-gs64 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to Container Registry + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.DOCKER_REGISTRY_USERNAME }} + password: ${{ secrets.DOCKER_REGISTRY_TOKEN }} + - name: Docker build and push + uses: docker/build-push-action@v5 + with: + context: ./docker/gs64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + secrets: GIT_AUTH_TOKEN=${{ secrets.DOCKER_REGISTRY_TOKEN }} diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 3468fa6..be51582 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -1,4 +1,4 @@ -name: Build and Publish Docker Images +name: Build and Publish Pharo Docker Images on: workflow_dispatch: push: diff --git a/.github/workflows/docker-tests-gs64.yml b/.github/workflows/docker-tests-gs64.yml new file mode 100644 index 0000000..51333f0 --- /dev/null +++ b/.github/workflows/docker-tests-gs64.yml @@ -0,0 +1,14 @@ +name: GS64 Docker Tests +on: + - push + - pull_request + - workflow_dispatch +jobs: + unit-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 2 + - name: Run tests using Docker + run: ./.docker/gs64/docker-tests.sh diff --git a/README.md b/README.md index 15be4b8..5bac693 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,14 @@ within the image. [![Pharo Unit Tests](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests.yml) [![GS64 - Unit Tests](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests-gs64.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/unit-tests-gs64.yml) -[![Docker Tests](https://github.com/ba-st/Launchpad/actions/workflows/docker-tests.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-tests.yml) +[![Pharo Docker Tests](https://github.com/ba-st/Launchpad/actions/workflows/docker-tests.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-tests.yml) +[![GS64 Docker Tests](https://github.com/ba-st/Launchpad/actions/workflows/docker-tests-gs64.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-tests-gs64.yml) [![Coverage Status](https://codecov.io/github/ba-st/Launchpad/coverage.svg?branch=release-candidate)](https://codecov.io/gh/ba-st/Launchpad/branch/release-candidate) [![Baseline Groups](https://github.com/ba-st/Launchpad/actions/workflows/loading-groups.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/loading-groups.yml) [![GS64 Components](https://github.com/ba-st/Launchpad/actions/workflows/loading-gs64-components.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/loading-gs64-components.yml) -[![Docker Build](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml) +[![Pharo Docker Build](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml) +[![GS64 Docker Build](https://github.com/ba-st/Launchpad/actions/workflows/docker-build-gs64.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-build-gs64.yml) [![Markdown Lint](https://github.com/ba-st/Launchpad/actions/workflows/markdown-lint.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/markdown-lint.yml) [![Shellcheck](https://github.com/ba-st/Stargate/actions/workflows/shellcheck.yml/badge.svg)](https://github.com/ba-st/Stargate/actions/workflows/shellcheck.yml) From dfceb21fa56eb8c58a6a720532a7efe794f766fd Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Fri, 3 Nov 2023 09:46:29 -0300 Subject: [PATCH 22/25] Check existence of keyfile in docker test for GS64 --- .docker/gs64/docker-tests.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.docker/gs64/docker-tests.sh b/.docker/gs64/docker-tests.sh index 2c6ae40..42349ae 100755 --- a/.docker/gs64/docker-tests.sh +++ b/.docker/gs64/docker-tests.sh @@ -57,6 +57,11 @@ fi docker network create --attachable launchpad-net print_info "Starting stone" +if [[ ! -f "$PWD"/.docker/gs64/gemstone.key ]]; then + print_error "Missing $PWD/.docker/gs64/gemstone.key" + exit 1 +fi + docker run --rm --detach --name gs64-stone \ -e TZ="America/Argentina/Buenos_Aires" \ --cap-add=SYS_RESOURCE \ From 6ce68688455eed9f1ad6bcca47da5bf72ce5a982 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Fri, 3 Nov 2023 11:06:17 -0300 Subject: [PATCH 23/25] Dump keyfile before mounting volume --- .github/workflows/docker-tests-gs64.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/docker-tests-gs64.yml b/.github/workflows/docker-tests-gs64.yml index 51333f0..71b6d66 100644 --- a/.github/workflows/docker-tests-gs64.yml +++ b/.github/workflows/docker-tests-gs64.yml @@ -10,5 +10,12 @@ jobs: - uses: actions/checkout@v3 with: fetch-depth: 2 + - name: Configure keyfile + run: | + echo "$GS_KEYFILE" > ./.docker/gs64/gemstone.key + env: + GS_KEYFILE: ${{ secrets.GS_KEYFILE }} - name: Run tests using Docker run: ./.docker/gs64/docker-tests.sh + - name: Remove keyfile + run: rm -f ./.docker/gs64/gemstone.key From cc75e2cbd45a103376de6aaf19c92fd3a8206bbc Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Fri, 3 Nov 2023 11:42:46 -0300 Subject: [PATCH 24/25] Update docs --- README.md | 7 +++---- docs/reference/CLI.md | 12 ++++++++++++ docs/reference/Docker.md | 28 +++++++++++++++++++++++++--- docs/reference/Tracing.md | 9 +++++++++ 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5bac693..5b972b6 100644 --- a/README.md +++ b/README.md @@ -13,15 +13,14 @@ within the image. [![Baseline Groups](https://github.com/ba-st/Launchpad/actions/workflows/loading-groups.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/loading-groups.yml) [![GS64 Components](https://github.com/ba-st/Launchpad/actions/workflows/loading-gs64-components.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/loading-gs64-components.yml) -[![Pharo Docker Build](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml) -[![GS64 Docker Build](https://github.com/ba-st/Launchpad/actions/workflows/docker-build-gs64.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-build-gs64.yml) [![Markdown Lint](https://github.com/ba-st/Launchpad/actions/workflows/markdown-lint.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/markdown-lint.yml) [![Shellcheck](https://github.com/ba-st/Stargate/actions/workflows/shellcheck.yml/badge.svg)](https://github.com/ba-st/Stargate/actions/workflows/shellcheck.yml) +[![Pharo Docker Build](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-build.yml) +[![GS64 Docker Build](https://github.com/ba-st/Launchpad/actions/workflows/docker-build-gs64.yml/badge.svg)](https://github.com/ba-st/Launchpad/actions/workflows/docker-build-gs64.yml) + [![GitHub release](https://img.shields.io/github/release/ba-st/Launchpad.svg)](https://github.com/ba-st/Launchpad/releases/latest) -[![Pharo 8.0](https://img.shields.io/badge/Pharo-8.0-informational)](https://pharo.org) -[![Pharo 9.0](https://img.shields.io/badge/Pharo-9.0-informational)](https://pharo.org) [![Pharo 10](https://img.shields.io/badge/Pharo-10-informational)](https://pharo.org) [![Pharo 11](https://img.shields.io/badge/Pharo-11-informational)](https://pharo.org) diff --git a/docs/reference/CLI.md b/docs/reference/CLI.md index 72f0da0..4582820 100644 --- a/docs/reference/CLI.md +++ b/docs/reference/CLI.md @@ -21,6 +21,18 @@ vast/bin/esnx \ launchpad ``` +For [GemStone/S 64](https://gemtalksystems.com/products/gs64/versions37x/) the command must be passed after the topaz arguments: + +```bash +topaz -l -- launchpad +``` + +and starting the command line handler by evaluating: + +```smalltalk + LaunchpadCommandLineHandler activateWith: (CommandLineArguments new copyAfter: '--') +``` + For the sake of simplicity, from now on we will omit in the examples the VM and image parameters: diff --git a/docs/reference/Docker.md b/docs/reference/Docker.md index d50409a..6eff11d 100644 --- a/docs/reference/Docker.md +++ b/docs/reference/Docker.md @@ -1,5 +1,7 @@ # Docker support +## Docker support for Pharo + Launchpad provides a Docker image that can be used as base for containerized applications. It's built on top of [pharo:v11.0.0](https://github.com/ba-st/docker-pharo-runtime), adding some useful scripts for Launchpad-based applications: @@ -11,7 +13,7 @@ adding some useful scripts for Launchpad-based applications: a `SIGTERM` handler for gracefully stopping the application. - `launchpad-healthcheck` is run as the default docker `HEALTHCHECK` -## How to use as base docker image +### How to use as base pharo docker image In your Dockerfile put something like: @@ -20,7 +22,7 @@ FROM ghcr.io/ba-st/pharo-loader:v11.0.0 AS loader # Load your own application RUN pharo metacello install github://owner/repo:branch BaselineOfProject -FROM ghcr.io/ba-st/launchpad:v4 +FROM ghcr.io/ba-st/launchpad:v5 COPY --from=loader /opt/pharo/Pharo.image ./ COPY --from=loader /opt/pharo/Pharo*.sources ./ @@ -29,8 +31,28 @@ COPY --from=loader /opt/pharo/Pharo*.sources ./ CMD [ "launchpad-start", "app-name" , "--parameter=value" ] ``` -## Environment variables +### Environment variables - `LAUNCHPAD__COMMAND_SERVER_PORT` defines in which port is listening the TCP command server. Defaults to 22222. - `LAUNCHPAD__LOG_FORMAT` can be set to `json` to enable structured logging + +## Docker support for GemStone/S 64 + +Launchpad provides a Docker image that can be used as base for containerized +gems. It's built on top of [gs64-gem:v3.7.0](https://github.com/ba-st/Docker-GemStone-64), +adding some useful scripts for Launchpad-based applications: + +- `launchpad` starts the CLI + +### How to use as base gem docker image + +In your Dockerfile put something like: + +```docker +FROM ghcr.io/ba-st/launchpad-gs64:v5 + +# Your own directives + +CMD [ "launchpad", "start", "app-name" , "--parameter=value" ] +``` diff --git a/docs/reference/Tracing.md b/docs/reference/Tracing.md index d02a084..49af17a 100644 --- a/docs/reference/Tracing.md +++ b/docs/reference/Tracing.md @@ -15,3 +15,12 @@ When using Launchpad in Pharo the following dumpers are available: opened in a Pharo image and debugged live using the familiar tooling. - `NullStackTraceDumper` emits a warning and doesn't produce any stack trace. Its usage is discouraged in production environments. + +## Stack tracing for GemStone/S 64 + +When using Launchpad in GemStone/S the following dumpers are available: + +- `StackTraceTextDumper` produces a textual stack trace written to the + configured stream. +- `NullStackTraceDumper` emits a warning and doesn't produce any stack trace. Its + usage is discouraged in production environments. From 240c4a551580f70fd4e00b083020c2a269e3a088 Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Fri, 3 Nov 2023 11:45:07 -0300 Subject: [PATCH 25/25] Fix lint failures --- docs/reference/CLI.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/reference/CLI.md b/docs/reference/CLI.md index 4582820..cac3464 100644 --- a/docs/reference/CLI.md +++ b/docs/reference/CLI.md @@ -21,7 +21,8 @@ vast/bin/esnx \ launchpad ``` -For [GemStone/S 64](https://gemtalksystems.com/products/gs64/versions37x/) the command must be passed after the topaz arguments: +For [GemStone/S 64](https://gemtalksystems.com/products/gs64/versions37x/) the +command must be passed after the topaz arguments: ```bash topaz -l -- launchpad @@ -30,7 +31,8 @@ topaz -l -- launchpad and starting the command line handler by evaluating: ```smalltalk - LaunchpadCommandLineHandler activateWith: (CommandLineArguments new copyAfter: '--') + LaunchpadCommandLineHandler activateWith: + (CommandLineArguments new copyAfter: '--') ``` For the sake of simplicity, from now on we will omit in the examples the VM and