diff --git a/.github/workflows/publish-ghcr.yaml.yml b/.github/workflows/publish-ghcr.yaml.yml new file mode 100644 index 0000000000..57bae057b2 --- /dev/null +++ b/.github/workflows/publish-ghcr.yaml.yml @@ -0,0 +1,38 @@ +name: Build and Push to GHCR + +on: + push: + branches: [master] + +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 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..489018fe42 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +# 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 mainnet config +WORKDIR /root/.grin/main +RUN grin server config +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/=.*$/= false/' grin-server.toml + +# Mainnet ports +EXPOSE 3413 3414 + +# Testnet ports +EXPOSE 13413 13414 + +# Stratum port +EXPOSE 3416 + +WORKDIR /root/.grin +ENTRYPOINT ["grin"] +CMD ["server", "run"] \ No newline at end of file diff --git a/doc/build.md b/doc/build.md index b25d3a49bd..af6f548baf 100644 --- a/doc/build.md +++ b/doc/build.md @@ -106,10 +106,8 @@ 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 diff --git a/doc/translations/build_ES.md b/doc/translations/build_ES.md index 61fbdf4e36..e04d0b0d7d 100644 --- a/doc/translations/build_ES.md +++ b/doc/translations/build_ES.md @@ -96,7 +96,7 @@ 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 diff --git a/doc/translations/build_JP.md b/doc/translations/build_JP.md index 9b76056179..bccd00963d 100644 --- a/doc/translations/build_JP.md +++ b/doc/translations/build_JP.md @@ -100,10 +100,8 @@ grin client --help ## Docker ```sh -docker build -t grin -f etc/Dockerfile . +docker build -t grin . ``` -testnetを使用する場合、代わりに`etc/Dockerfile.testnet`を指定。 - コンテナ内で実行する場合、grinのキャッシュをバインドマウントすることも可能。 ```sh diff --git a/doc/translations/build_KR.md b/doc/translations/build_KR.md index ff20d95a57..79a86ec8c8 100644 --- a/doc/translations/build_KR.md +++ b/doc/translations/build_KR.md @@ -101,10 +101,8 @@ 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 diff --git a/doc/translations/build_ZH-CN.md b/doc/translations/build_ZH-CN.md index eca2dbd0a1..9850f74086 100644 --- a/doc/translations/build_ZH-CN.md +++ b/doc/translations/build_ZH-CN.md @@ -98,10 +98,8 @@ grin client --help ## Docker ```sh -docker build -t grin -f etc/Dockerfile . +docker build -t grin . ``` -对于 testnet, 使用 `etc/Dockerfile.testnet` 代替 - 您可以绑定安装您的 grin 缓存以在容器中运行。 ```sh 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"]