From fc2d9199c3ff80c5c7305e3fc5b1f6fe86e8dacf Mon Sep 17 00:00:00 2001 From: ardocrat Date: Wed, 17 Dec 2025 21:42:47 +0300 Subject: [PATCH 1/9] bin: ability to use chain type argument for 'run' subcommand --- src/bin/grin.rs | 13 +++++++++++++ src/bin/grin.yml | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/src/bin/grin.rs b/src/bin/grin.rs index 2d32be29ae..57acbd0dfc 100644 --- a/src/bin/grin.rs +++ b/src/bin/grin.rs @@ -115,6 +115,19 @@ fn real_main() -> i32 { panic!("Error loading server configuration: {}", e); })); } else { + // Get chain type from run command argument. + let chain_type = match server_args.subcommand() { + ("run", Some(run_args)) => { + if run_args.is_present("testnet") { + global::ChainTypes::Testnet + } else if run_args.is_present("usernet") { + global::ChainTypes::UserTesting + } else { + chain_type + } + } + _ => chain_type, + }; node_config = Some( config::initial_setup_server(&chain_type).unwrap_or_else(|e| { panic!("Error loading server configuration: {}", e); diff --git a/src/bin/grin.yml b/src/bin/grin.yml index 20a4937447..235b8e5633 100644 --- a/src/bin/grin.yml +++ b/src/bin/grin.yml @@ -47,6 +47,15 @@ subcommands: about: Generate a configuration grin-server.toml file in the current directory - run: about: Run the Grin server in this console + args: + - testnet: + help: Run grin against the Testnet (as opposed to mainnet) + long: testnet + takes_value: false + - usernet: + help: Run grin as a local-only network. Doesn't block peer connections but will not connect to any peer or seed + long: usernet + takes_value: false - client: about: Communicates with the Grin server subcommands: From be1f9eb553c58eef3e7e0f56558a6ccbed8d2f66 Mon Sep 17 00:00:00 2001 From: ardocrat Date: Wed, 17 Dec 2025 22:36:49 +0300 Subject: [PATCH 2/9] docker: single image for mainnet and testnet, update build docs --- Dockerfile | 45 ++++++++++++++++++++++++++++++ doc/build.md | 8 ++---- doc/translations/build_ES.md | 4 +-- doc/translations/build_JP.md | 8 ++---- doc/translations/build_KR.md | 8 ++---- doc/translations/build_ZH-CN.md | 8 ++---- etc/Dockerfile | 49 --------------------------------- etc/Dockerfile.testnet | 49 --------------------------------- 8 files changed, 59 insertions(+), 120 deletions(-) create mode 100644 Dockerfile delete mode 100644 etc/Dockerfile delete mode 100644 etc/Dockerfile.testnet diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..930949f425 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,45 @@ +# Builder +FROM rust:slim-trixie AS builder + +WORKDIR /usr/src/grin +COPY . . + +RUN apt update && \ + apt install -y libncurses5-dev libncursesw5-dev + +RUN cargo build --release + +# Runner +FROM debian:trixie-slim +COPY --from=builder /usr/src/grin/target/release/grin /usr/local/bin/grin + +RUN apt update && \ + apt install -y libncursesw5-dev + +# Create grin user +RUN useradd -ms /bin/bash grin +USER grin + +RUN mkdir ~/.grin +VOLUME ["/home/grin/.grin"] + +# Create mainnet config +WORKDIR /home/grin/.grin/main +RUN grin server config +RUN sed -i '/^run_tui /s/=.*$/= true/' grin-server.toml + +# Create testnet config +WORKDIR /home/grin/.grin/test +RUN grin --testnet server config +RUN sed -i '/^run_tui /s/=.*$/= true/' grin-server.toml + +# Mainnet ports +EXPOSE 3413 3414 + +# Testnet ports +EXPOSE 13413 13414 + +# Stratum port +EXPOSE 3416 + +ENTRYPOINT ["grin", "server", "run"] \ No newline at end of file diff --git a/doc/build.md b/doc/build.md index b25d3a49bd..7c3e89f3b1 100644 --- a/doc/build.md +++ b/doc/build.md @@ -106,16 +106,14 @@ grin client --help ## Docker ```sh -docker build -t grin -f etc/Dockerfile . +docker build -t grin . ``` -For testnet, use `etc/Dockerfile.testnet` instead - You can bind-mount your grin cache to run inside the container. ```sh -docker run -it -d -v $HOME/.grin:/root/.grin grin +docker run -it -d -v $HOME/.grin:/home/grin/.grin grin ``` -If you prefer to use a docker named volume, you can pass `-v dotgrin:/root/.grin` instead. +If you prefer to use a docker named volume, you can pass `-v dotgrin:/home/grin/.grin` instead. Using a named volume copies default configurations upon volume creation. ## Cross-platform builds diff --git a/doc/translations/build_ES.md b/doc/translations/build_ES.md index 61fbdf4e36..5d38723743 100644 --- a/doc/translations/build_ES.md +++ b/doc/translations/build_ES.md @@ -96,13 +96,13 @@ grin client --help ## Docker ```sh -docker build -t grin -f etc/Dockerfile . +docker build -t grin . ``` Puede ubicar la caché de Grin para que se ejecute dentro del contenedor ```sh -docker run -it -d -v $HOME/.grin:/root/.grin grin +docker run -it -d -v $HOME/.grin:/home/grin/.grin grin ``` ## Compilación multiplataforma diff --git a/doc/translations/build_JP.md b/doc/translations/build_JP.md index 9b76056179..7693c11423 100644 --- a/doc/translations/build_JP.md +++ b/doc/translations/build_JP.md @@ -100,16 +100,14 @@ grin client --help ## Docker ```sh -docker build -t grin -f etc/Dockerfile . +docker build -t grin . ``` -testnetを使用する場合、代わりに`etc/Dockerfile.testnet`を指定。 - コンテナ内で実行する場合、grinのキャッシュをバインドマウントすることも可能。 ```sh -docker run -it -d -v $HOME/.grin:/root/.grin grin +docker run -it -d -v $HOME/.grin:/home/grin/.grin grin ``` -dockerの名前付きボリュームを使用する場合、代わりに`-v dotgrin:/root/.grin`を指定。 +dockerの名前付きボリュームを使用する場合、代わりに`-v dotgrin:/home/grin/.grin`を指定。 ボリュームが作成される前に、名前付きボリュームがコピーされる。 ## クロスプラットフォームビルド diff --git a/doc/translations/build_KR.md b/doc/translations/build_KR.md index ff20d95a57..b3766104d4 100644 --- a/doc/translations/build_KR.md +++ b/doc/translations/build_KR.md @@ -101,17 +101,15 @@ grin client --help ## Docker 사용하기 ```sh -docker build -t grin -f etc/Dockerfile . +docker build -t grin . ``` - -testnet을 사용하려면 `etc/Dockerfile.testnet` 을 사용하세요. container 안에서 grin cache를 bind-mount로 사용 할 수 있습니다. ```sh -docker run -it -d -v $HOME/.grin:/root/.grin grin +docker run -it -d -v $HOME/.grin:/home/grin/.grin grin ``` -Docker를 named volume으로 사용하는 것을 선호한다면 `-v dotgrin:/root/.grin` 명령어를 대신 사용할 수 있습니다. +Docker를 named volume으로 사용하는 것을 선호한다면 `-v dotgrin:/home/grin/.grin` 명령어를 대신 사용할 수 있습니다. named volume샤용시 volume 생성시 기본 설정을 복사합니다. ## 크로스 플랫폼 빌드 diff --git a/doc/translations/build_ZH-CN.md b/doc/translations/build_ZH-CN.md index eca2dbd0a1..66e1802930 100644 --- a/doc/translations/build_ZH-CN.md +++ b/doc/translations/build_ZH-CN.md @@ -98,16 +98,14 @@ grin client --help ## Docker ```sh -docker build -t grin -f etc/Dockerfile . +docker build -t grin . ``` -对于 testnet, 使用 `etc/Dockerfile.testnet` 代替 - 您可以绑定安装您的 grin 缓存以在容器中运行。 ```sh -docker run -it -d -v $HOME/.grin:/root/.grin grin +docker run -it -d -v $HOME/.grin:/home/grin/.grin grin ``` -如果您更喜欢使用名为 volume 的 docker,则可以传递 `-v dotgrin: /root/.grin` 以替换。 +如果您更喜欢使用名为 volume 的 docker,则可以传递 `-v dotgrin: /home/grin/.grin` 以替换。 使用命名卷在创建卷时会复制默认配置。 ## 跨平台构建 diff --git a/etc/Dockerfile b/etc/Dockerfile deleted file mode 100644 index 87f1c7553a..0000000000 --- a/etc/Dockerfile +++ /dev/null @@ -1,49 +0,0 @@ -# Multistage docker build, requires docker 17.05 - -# builder stage -FROM rust:1.45 as builder - -RUN set -ex && \ - apt-get update && \ - apt-get --no-install-recommends --yes install \ - clang \ - libclang-dev \ - llvm-dev \ - libncurses5 \ - libncursesw5 \ - cmake \ - git - -WORKDIR /usr/src/grin - -# Copying Grin -COPY . . - -# Building Grin -RUN cargo build --release - -# runtime stage -FROM debian:10 - -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales openssl - -RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ - dpkg-reconfigure --frontend=noninteractive locales && \ - update-locale LANG=en_US.UTF-8 - -ENV LANG en_US.UTF-8 - -COPY --from=builder /usr/src/grin/target/release/grin /usr/local/bin/grin - -WORKDIR /root/.grin - -RUN grin server config && \ - sed -i -e 's/run_tui = true/run_tui = false/' grin-server.toml - -VOLUME ["/root/.grin"] - -EXPOSE 3413 3414 3415 3416 - -ENTRYPOINT ["grin"] - -CMD ["server", "run"] diff --git a/etc/Dockerfile.testnet b/etc/Dockerfile.testnet deleted file mode 100644 index f184d5c3f9..0000000000 --- a/etc/Dockerfile.testnet +++ /dev/null @@ -1,49 +0,0 @@ -# Multistage docker build, requires docker 17.05 - -# builder stage -FROM rust:1.45 as builder - -RUN set -ex && \ - apt-get update && \ - apt-get --no-install-recommends --yes install \ - clang \ - libclang-dev \ - llvm-dev \ - libncurses5 \ - libncursesw5 \ - cmake \ - git - -WORKDIR /usr/src/grin - -# Copying Grin -COPY . . - -# Building Grin -RUN cargo build --release - -# runtime stage -FROM debian:10 - -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales openssl - -RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ - dpkg-reconfigure --frontend=noninteractive locales && \ - update-locale LANG=en_US.UTF-8 - -ENV LANG en_US.UTF-8 - -COPY --from=builder /usr/src/grin/target/release/grin /usr/local/bin/grin - -WORKDIR /root/.grin - -RUN grin --testnet server config && \ - sed -i -e 's/run_tui = true/run_tui = false/' grin-server.toml - -VOLUME ["/root/.grin"] - -EXPOSE 13413 13414 13415 13416 - -ENTRYPOINT ["grin", "--testnet"] - -CMD ["server", "run"] From 89cc58a974a040df98373255971318c1d411e29c Mon Sep 17 00:00:00 2001 From: ardocrat Date: Thu, 18 Dec 2025 00:47:57 +0300 Subject: [PATCH 3/9] docker: root user --- Dockerfile | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 930949f425..cfe00e69ff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,20 +16,13 @@ COPY --from=builder /usr/src/grin/target/release/grin /usr/local/bin/grin RUN apt update && \ apt install -y libncursesw5-dev -# Create grin user -RUN useradd -ms /bin/bash grin -USER grin - -RUN mkdir ~/.grin -VOLUME ["/home/grin/.grin"] - # Create mainnet config -WORKDIR /home/grin/.grin/main +WORKDIR /root/.grin/main RUN grin server config RUN sed -i '/^run_tui /s/=.*$/= true/' grin-server.toml # Create testnet config -WORKDIR /home/grin/.grin/test +WORKDIR /root/.grin/test RUN grin --testnet server config RUN sed -i '/^run_tui /s/=.*$/= true/' grin-server.toml @@ -42,4 +35,5 @@ EXPOSE 13413 13414 # Stratum port EXPOSE 3416 +WORKDIR /root/.grin ENTRYPOINT ["grin", "server", "run"] \ No newline at end of file From 5287804b2582fc92b4d261dbea81a0c78a8ee97b Mon Sep 17 00:00:00 2001 From: ardocrat Date: Thu, 18 Dec 2025 01:54:02 +0300 Subject: [PATCH 4/9] github: ghcr publish --- .github/workflows/publish-ghcr.yaml.yml | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/publish-ghcr.yaml.yml diff --git a/.github/workflows/publish-ghcr.yaml.yml b/.github/workflows/publish-ghcr.yaml.yml new file mode 100644 index 0000000000..504f96837a --- /dev/null +++ b/.github/workflows/publish-ghcr.yaml.yml @@ -0,0 +1,38 @@ +name: Build and Push to GHCR + +on: + push: + branches: [main, docker_package] + +jobs: + build-andpush: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_USERNAME }} + password: ${{ secrets.GHCR_TOKEN }} + + - name: Generate image tag + id: vars + run: echo "tag=$(awk -F'"' '/^version/{ print $2; exit; }' Cargo.toml)" >> $GITHUB_OUTPUT + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + push: true + tags: | + ghcr.io/${{ secrets.GHCR_USERNAME }}/grin:latest + ghcr.io/${{ secrets.GHCR_USERNAME }}/grin:${{ steps.vars.outputs.tag }} + cache-from: type=gha + cache-to: type=gha,mode=max \ No newline at end of file From 8bb0f255c191cb683af61288cd3e81ba526b68b1 Mon Sep 17 00:00:00 2001 From: ardocrat Date: Thu, 18 Dec 2025 02:25:17 +0300 Subject: [PATCH 5/9] github: build image for master branch only --- .github/workflows/publish-ghcr.yaml.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-ghcr.yaml.yml b/.github/workflows/publish-ghcr.yaml.yml index 504f96837a..57bae057b2 100644 --- a/.github/workflows/publish-ghcr.yaml.yml +++ b/.github/workflows/publish-ghcr.yaml.yml @@ -2,7 +2,7 @@ name: Build and Push to GHCR on: push: - branches: [main, docker_package] + branches: [master] jobs: build-andpush: From 5a30695d0ca1562c479879b7e610225f592a776a Mon Sep 17 00:00:00 2001 From: ardocrat Date: Thu, 18 Dec 2025 16:18:16 +0300 Subject: [PATCH 6/9] docs: fix paths --- doc/build.md | 4 ++-- doc/translations/build_ES.md | 2 +- doc/translations/build_JP.md | 4 ++-- doc/translations/build_KR.md | 4 ++-- doc/translations/build_ZH-CN.md | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/build.md b/doc/build.md index 7c3e89f3b1..af6f548baf 100644 --- a/doc/build.md +++ b/doc/build.md @@ -111,9 +111,9 @@ docker build -t grin . You can bind-mount your grin cache to run inside the container. ```sh -docker run -it -d -v $HOME/.grin:/home/grin/.grin grin +docker run -it -d -v $HOME/.grin:/root/.grin grin ``` -If you prefer to use a docker named volume, you can pass `-v dotgrin:/home/grin/.grin` instead. +If you prefer to use a docker named volume, you can pass `-v dotgrin:/root/.grin` instead. Using a named volume copies default configurations upon volume creation. ## Cross-platform builds diff --git a/doc/translations/build_ES.md b/doc/translations/build_ES.md index 5d38723743..e04d0b0d7d 100644 --- a/doc/translations/build_ES.md +++ b/doc/translations/build_ES.md @@ -102,7 +102,7 @@ docker build -t grin . Puede ubicar la caché de Grin para que se ejecute dentro del contenedor ```sh -docker run -it -d -v $HOME/.grin:/home/grin/.grin grin +docker run -it -d -v $HOME/.grin:/root/.grin grin ``` ## Compilación multiplataforma diff --git a/doc/translations/build_JP.md b/doc/translations/build_JP.md index 7693c11423..bccd00963d 100644 --- a/doc/translations/build_JP.md +++ b/doc/translations/build_JP.md @@ -105,9 +105,9 @@ docker build -t grin . コンテナ内で実行する場合、grinのキャッシュをバインドマウントすることも可能。 ```sh -docker run -it -d -v $HOME/.grin:/home/grin/.grin grin +docker run -it -d -v $HOME/.grin:/root/.grin grin ``` -dockerの名前付きボリュームを使用する場合、代わりに`-v dotgrin:/home/grin/.grin`を指定。 +dockerの名前付きボリュームを使用する場合、代わりに`-v dotgrin:/root/.grin`を指定。 ボリュームが作成される前に、名前付きボリュームがコピーされる。 ## クロスプラットフォームビルド diff --git a/doc/translations/build_KR.md b/doc/translations/build_KR.md index b3766104d4..79a86ec8c8 100644 --- a/doc/translations/build_KR.md +++ b/doc/translations/build_KR.md @@ -106,10 +106,10 @@ docker build -t grin . container 안에서 grin cache를 bind-mount로 사용 할 수 있습니다. ```sh -docker run -it -d -v $HOME/.grin:/home/grin/.grin grin +docker run -it -d -v $HOME/.grin:/root/.grin grin ``` -Docker를 named volume으로 사용하는 것을 선호한다면 `-v dotgrin:/home/grin/.grin` 명령어를 대신 사용할 수 있습니다. +Docker를 named volume으로 사용하는 것을 선호한다면 `-v dotgrin:/root/.grin` 명령어를 대신 사용할 수 있습니다. named volume샤용시 volume 생성시 기본 설정을 복사합니다. ## 크로스 플랫폼 빌드 diff --git a/doc/translations/build_ZH-CN.md b/doc/translations/build_ZH-CN.md index 66e1802930..9850f74086 100644 --- a/doc/translations/build_ZH-CN.md +++ b/doc/translations/build_ZH-CN.md @@ -103,9 +103,9 @@ docker build -t grin . 您可以绑定安装您的 grin 缓存以在容器中运行。 ```sh -docker run -it -d -v $HOME/.grin:/home/grin/.grin grin +docker run -it -d -v $HOME/.grin:/root/.grin grin ``` -如果您更喜欢使用名为 volume 的 docker,则可以传递 `-v dotgrin: /home/grin/.grin` 以替换。 +如果您更喜欢使用名为 volume 的 docker,则可以传递 `-v dotgrin: /root/.grin` 以替换。 使用命名卷在创建卷时会复制默认配置。 ## 跨平台构建 From 8650be4722ca1baa85c8e87b9446404a32ea1e3b Mon Sep 17 00:00:00 2001 From: ardocrat Date: Tue, 6 Jan 2026 00:46:35 +0300 Subject: [PATCH 7/9] docker: move 'server run' to command --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cfe00e69ff..65c3b62c17 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,4 +36,5 @@ EXPOSE 13413 13414 EXPOSE 3416 WORKDIR /root/.grin -ENTRYPOINT ["grin", "server", "run"] \ No newline at end of file +ENTRYPOINT ["grin"] +CMD ["server", "run"] \ No newline at end of file From dc0ff068de7857c478084104aa118135187673d0 Mon Sep 17 00:00:00 2001 From: ardocrat Date: Tue, 6 Jan 2026 00:48:35 +0300 Subject: [PATCH 8/9] Revert "bin: ability to use chain type argument for 'run' subcommand" This reverts commit fc2d9199c3ff80c5c7305e3fc5b1f6fe86e8dacf. --- src/bin/grin.rs | 13 ------------- src/bin/grin.yml | 9 --------- 2 files changed, 22 deletions(-) diff --git a/src/bin/grin.rs b/src/bin/grin.rs index 57acbd0dfc..2d32be29ae 100644 --- a/src/bin/grin.rs +++ b/src/bin/grin.rs @@ -115,19 +115,6 @@ fn real_main() -> i32 { panic!("Error loading server configuration: {}", e); })); } else { - // Get chain type from run command argument. - let chain_type = match server_args.subcommand() { - ("run", Some(run_args)) => { - if run_args.is_present("testnet") { - global::ChainTypes::Testnet - } else if run_args.is_present("usernet") { - global::ChainTypes::UserTesting - } else { - chain_type - } - } - _ => chain_type, - }; node_config = Some( config::initial_setup_server(&chain_type).unwrap_or_else(|e| { panic!("Error loading server configuration: {}", e); diff --git a/src/bin/grin.yml b/src/bin/grin.yml index 235b8e5633..20a4937447 100644 --- a/src/bin/grin.yml +++ b/src/bin/grin.yml @@ -47,15 +47,6 @@ subcommands: about: Generate a configuration grin-server.toml file in the current directory - run: about: Run the Grin server in this console - args: - - testnet: - help: Run grin against the Testnet (as opposed to mainnet) - long: testnet - takes_value: false - - usernet: - help: Run grin as a local-only network. Doesn't block peer connections but will not connect to any peer or seed - long: usernet - takes_value: false - client: about: Communicates with the Grin server subcommands: From 55ecef46b8ff8d35d94fa54524f3f3c6c523f816 Mon Sep 17 00:00:00 2001 From: ardocrat Date: Tue, 6 Jan 2026 21:29:53 +0300 Subject: [PATCH 9/9] docker: disable tui at config --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 65c3b62c17..489018fe42 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,12 +19,12 @@ RUN apt update && \ # Create mainnet config WORKDIR /root/.grin/main RUN grin server config -RUN sed -i '/^run_tui /s/=.*$/= true/' grin-server.toml +RUN sed -i '/^run_tui /s/=.*$/= false/' grin-server.toml # Create testnet config WORKDIR /root/.grin/test RUN grin --testnet server config -RUN sed -i '/^run_tui /s/=.*$/= true/' grin-server.toml +RUN sed -i '/^run_tui /s/=.*$/= false/' grin-server.toml # Mainnet ports EXPOSE 3413 3414