From 9dfdae2c269b70922694a5a2c43116ef1a548621 Mon Sep 17 00:00:00 2001 From: Gianmarco Fraccaroli Date: Fri, 13 Sep 2024 12:41:31 +0200 Subject: [PATCH] feat: added docker images for namadillo and faucet interface --- .github/workflows/docker.yml | 53 ++++++++ apps/faucet/package.json | 9 ++ docker/faucet/Dockerfile | 24 ++++ .../nginx.conf} | 0 .../.config.toml} | 0 .../Dockerfile} | 19 ++- docker/namadillo/bootstrap_config.sh | 25 ++++ docker/namadillo/nginx.conf | 11 ++ package.json | 4 +- yarn.lock | 119 +++++++++++++++++- 10 files changed, 254 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/docker.yml create mode 100644 docker/faucet/Dockerfile rename docker/{namadillo-nginx.conf => faucet/nginx.conf} (100%) rename docker/{.namadillo.config.toml => namadillo/.config.toml} (100%) rename docker/{namadillo.Dockerfile => namadillo/Dockerfile} (66%) create mode 100644 docker/namadillo/bootstrap_config.sh create mode 100644 docker/namadillo/nginx.conf diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 000000000..2d22bb026 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,53 @@ +name: Docker 🐳 + +on: + workflow_dispatch: + push: + branches: + - main + pull_request: + branches: + - main + +env: + GIT_LFS_SKIP_SMUDGE: 1 + +permissions: + id-token: write + contents: write + packages: write + +jobs: + docker: + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + images: + - path: "docker/namadillo/Dockerfile" + tag: "namadillo" + - path: "docker/namadillo/faucet" + tag: "faucet-interface" + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and Push docker image + uses: docker/build-push-action@v3 + with: + context: . + file: ${{ matrix.images.path }} + push: ${{ github.ref == 'refs/heads/main' }} + tags: ${{ matrix.images.tag }}-latest, ${{ matrix.images.tag }}-main + cache-from: type=gha + cache-to: type=gha,mode=max \ No newline at end of file diff --git a/apps/faucet/package.json b/apps/faucet/package.json index 174753bf2..a7bf8b423 100644 --- a/apps/faucet/package.json +++ b/apps/faucet/package.json @@ -19,6 +19,8 @@ "@cosmjs/encoding": "^0.29.0", "buffer": "^6.0.3", "dompurify": "^3.0.5", + "ethers": "6.7.1", + "framer-motion": "^11.5.4", "node-forge": "^1.3.1", "react": "^18.3.0", "react-dom": "^18.3.0", @@ -34,6 +36,9 @@ "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "@types/styled-components": "^5.1.26", + "copy-webpack-plugin": "^12.0.2", + "crypto-browserify": "^3.12.0", + "css-loader": "^7.1.2", "dotenv": "^16.0.3", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", @@ -41,17 +46,21 @@ "eslint-plugin-import": "^2.30.0", "eslint-plugin-react": "^7.35.2", "eslint-plugin-react-hooks": "^4.6.0", + "file-loader": "^6.2.0", "html-webpack-plugin": "^5.6.0", "local-cors-proxy": "^1.1.0", + "path-browserify": "^1.0.1", "postcss": "^8.4.32", "postcss-loader": "^8.1.0", "postcss-preset-env": "^9.3.0", + "style-loader": "^4.0.0", "tailwindcss": "^3.4.1", "ts-loader": "^9.3.1", "ts-node": "^10.9.1", "tsconfig-paths-webpack-plugin": "^4.1.0", "typescript": "^5.5.4", "typescript-plugin-styled-components": "^2.0.0", + "vm-browserify": "^1.1.2", "webpack": "^5.9.4", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.11.1" diff --git a/docker/faucet/Dockerfile b/docker/faucet/Dockerfile new file mode 100644 index 000000000..325f12f83 --- /dev/null +++ b/docker/faucet/Dockerfile @@ -0,0 +1,24 @@ +FROM rust:1.79 as builder +WORKDIR /app + +RUN apt update && apt install -y nodejs npm clang pkg-config libssl-dev protobuf-compiler curl +RUN npm install -g yarn + +COPY .yarnrc.yml tsconfig.base.json package.json yarn.lock . +COPY ./.yarn ./.yarn +COPY ./packages ./packages +COPY ./scripts ./scripts +COPY ./apps/faucet/package.json ./apps/faucet/package.json + +RUN yarn + +WORKDIR /app/apps/faucet + +COPY ./apps/faucet . +RUN yarn +RUN yarn build + +FROM nginx:alpine + +COPY --from=builder /app/apps/faucet/build /usr/share/nginx/html +COPY ./docker/faucet/nginx.conf /etc/nginx/conf.d/default.conf diff --git a/docker/namadillo-nginx.conf b/docker/faucet/nginx.conf similarity index 100% rename from docker/namadillo-nginx.conf rename to docker/faucet/nginx.conf diff --git a/docker/.namadillo.config.toml b/docker/namadillo/.config.toml similarity index 100% rename from docker/.namadillo.config.toml rename to docker/namadillo/.config.toml diff --git a/docker/namadillo.Dockerfile b/docker/namadillo/Dockerfile similarity index 66% rename from docker/namadillo.Dockerfile rename to docker/namadillo/Dockerfile index 8b18ec06b..7e54e0c1e 100644 --- a/docker/namadillo.Dockerfile +++ b/docker/namadillo/Dockerfile @@ -1,23 +1,34 @@ FROM rust:1.79 as builder WORKDIR /app + RUN apt update && apt install -y nodejs npm clang pkg-config libssl-dev protobuf-compiler curl RUN npm install -g yarn + RUN rustup target add wasm32-unknown-unknown RUN curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh -s -- -y + COPY .yarnrc.yml tsconfig.base.json package.json yarn.lock . COPY ./.yarn ./.yarn COPY ./packages ./packages COPY ./scripts ./scripts COPY ./apps/namadillo/package.json ./apps/namadillo/package.json + RUN yarn + WORKDIR /app/apps/namadillo COPY ./apps/namadillo/scripts ./scripts + RUN yarn wasm:build + COPY ./apps/namadillo . -RUN yarn -RUN yarn build +RUN yarn && yarn build FROM nginx:alpine +WORKDIR /app + COPY --from=builder /app/apps/namadillo/dist /usr/share/nginx/html -COPY ./docker/namadillo-nginx.conf /etc/nginx/conf.d/default.conf -COPY ./docker/namadillo.config.tom[l] /usr/share/nginx/html/config.toml +COPY ./docker/namadillo/nginx.conf /etc/nginx/conf.d/default.conf +# COPY ./docker/namadillo/config.tom[l] /usr/share/nginx/html/config.toml +COPY --chmod=0755 ./docker/namadillo/bootstrap_config.sh /docker-entrypoint.d/bootstrap_config.sh + +RUN chown nginx:nginx /docker-entrypoint.d/bootstrap_config.sh diff --git a/docker/namadillo/bootstrap_config.sh b/docker/namadillo/bootstrap_config.sh new file mode 100644 index 000000000..cea14026a --- /dev/null +++ b/docker/namadillo/bootstrap_config.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +CONFIG_PATH="/usr/share/nginx/html/config.toml" + +# if the config.toml file doesn't exist, we create it and we try to populate it from environemnt variables +# Otherwise we try to replace the settings from environemnt variables +if [ ! -f $CONFIG_PATH ]; then + echo "Bootstrapping new configuration file at $CONFIG_PATH" + touch $CONFIG_PATH + if [[ -n $INDEXER_URL ]]; then + echo "indexer_url = \"${INDEXER_URL}\"" >> $CONFIG_PATH + fi + if [[ -n $RPC_URL ]]; then + echo "rpc_url = \"${RPC_URL}\"" >> $CONFIG_PATH + fi +else + echo "Using configuration file at $CONFIG_PATH" + if [[ -n $INDEXER_URL ]]; then + sed -r -i "s~#?indexer_url = .*~indexer_url = \"${INDEXER_URL}\"~g" $CONFIG_PATH + fi + if [[ -n $RPC_URL ]]; then + sed -r -i "s~#?rpc_url = .*~rpc_url = \"${RPC_URL}\"~g" $CONFIG_PATH + fi + cat $CONFIG_PATH +fi \ No newline at end of file diff --git a/docker/namadillo/nginx.conf b/docker/namadillo/nginx.conf new file mode 100644 index 000000000..51acaff2f --- /dev/null +++ b/docker/namadillo/nginx.conf @@ -0,0 +1,11 @@ +server { + listen 80; + server_name localhost; + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ $uri.html /index.html; + } + gzip on; + gzip_types text/plain text/css application/javascript application/json application/vnd.ms-fontobject application/xml+rss application/atom+xml font/opentype font/ttf image/svg+xml; +} diff --git a/package.json b/package.json index 0f0f7640a..2f73e615c 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,9 @@ "lint": "wsrun -l --exclude-missing -c lint", "lint:fix": "wsrun -l --exclude-missing -c lint:fix", "lint:ci": "wsrun -l --exclude-missing -c lint:ci", - "prepare": "husky install" + "prepare": "husky install", + "docker-build-faucet": "docker build -f docker/faucet/Dockerfile .", + "docker-build-namadillo": "docker build -f docker/namadillo/Dockerfile ." }, "devDependencies": { "@release-it/conventional-changelog": "^8.0.1", diff --git a/yarn.lock b/yarn.lock index 54da07600..630eb57ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,6 +26,13 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:1.9.2": + version: 1.9.2 + resolution: "@adraffy/ens-normalize@npm:1.9.2" + checksum: 70aca9af28c8d707f6194d3a717582ce8b87087e9c395013f409b2e97b6918a177287bc3dd55c38955f2aa1d6ca604f94e66bfe9aa5651d8aa9979c0896786ee + languageName: node + linkType: hard + "@alloc/quick-lru@npm:^5.2.0": version: 5.2.0 resolution: "@alloc/quick-lru@npm:5.2.0" @@ -3547,6 +3554,9 @@ __metadata: "@types/react-dom": "npm:^18.3.0" "@types/styled-components": "npm:^5.1.26" buffer: "npm:^6.0.3" + copy-webpack-plugin: "npm:^12.0.2" + crypto-browserify: "npm:^3.12.0" + css-loader: "npm:^7.1.2" dompurify: "npm:^3.0.5" dotenv: "npm:^16.0.3" eslint: "npm:^8.57.0" @@ -3555,15 +3565,20 @@ __metadata: eslint-plugin-import: "npm:^2.30.0" eslint-plugin-react: "npm:^7.35.2" eslint-plugin-react-hooks: "npm:^4.6.0" + ethers: "npm:6.7.1" + file-loader: "npm:^6.2.0" + framer-motion: "npm:^11.5.4" html-webpack-plugin: "npm:^5.6.0" local-cors-proxy: "npm:^1.1.0" node-forge: "npm:^1.3.1" + path-browserify: "npm:^1.0.1" postcss: "npm:^8.4.32" postcss-loader: "npm:^8.1.0" postcss-preset-env: "npm:^9.3.0" react: "npm:^18.3.0" react-dom: "npm:^18.3.0" react-router-dom: "npm:^6.0.0" + style-loader: "npm:^4.0.0" styled-components: "npm:^5.3.5" tailwindcss: "npm:^3.4.1" ts-loader: "npm:^9.3.1" @@ -3571,6 +3586,7 @@ __metadata: tsconfig-paths-webpack-plugin: "npm:^4.1.0" typescript: "npm:^5.5.4" typescript-plugin-styled-components: "npm:^2.0.0" + vm-browserify: "npm:^1.1.2" webpack: "npm:^5.9.4" webpack-cli: "npm:^4.10.0" webpack-dev-server: "npm:^4.11.1" @@ -3817,6 +3833,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:1.1.2": + version: 1.1.2 + resolution: "@noble/hashes@npm:1.1.2" + checksum: 452a197522dabd163cf5297fe7b768fabba73072a198752074da6fce7c1438c7f614b27891391e9f6b118842656a4da4c0fc04e464ba1e15f306291d05dd106a + languageName: node + linkType: hard + "@noble/hashes@npm:1.3.2": version: 1.3.2 resolution: "@noble/hashes@npm:1.3.2" @@ -3831,6 +3854,13 @@ __metadata: languageName: node linkType: hard +"@noble/secp256k1@npm:1.7.1": + version: 1.7.1 + resolution: "@noble/secp256k1@npm:1.7.1" + checksum: 48091801d39daba75520012027d0ff0b1719338d96033890cfe0d287ad75af00d82769c0194a06e7e4fbd816ae3f204f4a59c9e26f0ad16b429f7e9b5403ccd5 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -8433,6 +8463,22 @@ __metadata: languageName: node linkType: hard +"copy-webpack-plugin@npm:^12.0.2": + version: 12.0.2 + resolution: "copy-webpack-plugin@npm:12.0.2" + dependencies: + fast-glob: "npm:^3.3.2" + glob-parent: "npm:^6.0.1" + globby: "npm:^14.0.0" + normalize-path: "npm:^3.0.0" + schema-utils: "npm:^4.2.0" + serialize-javascript: "npm:^6.0.2" + peerDependencies: + webpack: ^5.1.0 + checksum: 1a2715a1280a37b81b7040b89ed962db4aa75475b164f84f266fa4e81f209269b13f8bff10b104dff7558854bafedcdd4f30c40fd23ecd8fa28af45516b459cd + languageName: node + linkType: hard + "core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0": version: 3.38.1 resolution: "core-js-compat@npm:3.38.1" @@ -8759,6 +8805,30 @@ __metadata: languageName: node linkType: hard +"css-loader@npm:^7.1.2": + version: 7.1.2 + resolution: "css-loader@npm:7.1.2" + dependencies: + icss-utils: "npm:^5.1.0" + postcss: "npm:^8.4.33" + postcss-modules-extract-imports: "npm:^3.1.0" + postcss-modules-local-by-default: "npm:^4.0.5" + postcss-modules-scope: "npm:^3.2.0" + postcss-modules-values: "npm:^4.0.0" + postcss-value-parser: "npm:^4.2.0" + semver: "npm:^7.5.4" + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.27.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: edec9ed71e3c416c9c6ad41c138834c94baf7629de3b97a3337ae8cec4a45e05c57bdb7c4b4d267229fc04b8970d0d1c0734ded8dcd0ac8c7c286b36facdbbf0 + languageName: node + linkType: hard + "css-prefers-color-scheme@npm:^9.0.1": version: 9.0.1 resolution: "css-prefers-color-scheme@npm:9.0.1" @@ -10441,6 +10511,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:6.7.1": + version: 6.7.1 + resolution: "ethers@npm:6.7.1" + dependencies: + "@adraffy/ens-normalize": "npm:1.9.2" + "@noble/hashes": "npm:1.1.2" + "@noble/secp256k1": "npm:1.7.1" + "@types/node": "npm:18.15.13" + aes-js: "npm:4.0.0-beta.5" + tslib: "npm:2.4.0" + ws: "npm:8.5.0" + checksum: 1f5a4a024f865637bbc2c6d3383558ff9b62bf87a30d3159e3cc96d7b91e39e42483875edeff4ff0e30f3bea50d286598e2587d1652a0fcec0f8a8ad054a6d7f + languageName: node + linkType: hard + "ethers@npm:^6.7.1": version: 6.13.2 resolution: "ethers@npm:6.13.2" @@ -11156,7 +11241,7 @@ __metadata: languageName: node linkType: hard -"framer-motion@npm:^11.3.28": +"framer-motion@npm:^11.3.28, framer-motion@npm:^11.5.4": version: 11.5.4 resolution: "framer-motion@npm:11.5.4" dependencies: @@ -11701,7 +11786,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:14.0.2": +"globby@npm:14.0.2, globby@npm:^14.0.0": version: 14.0.2 resolution: "globby@npm:14.0.2" dependencies: @@ -18985,7 +19070,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^4.0.0": +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0": version: 4.2.0 resolution: "schema-utils@npm:4.2.0" dependencies: @@ -19122,7 +19207,7 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1": +"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1, serialize-javascript@npm:^6.0.2": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" dependencies: @@ -20114,6 +20199,15 @@ __metadata: languageName: node linkType: hard +"style-loader@npm:^4.0.0": + version: 4.0.0 + resolution: "style-loader@npm:4.0.0" + peerDependencies: + webpack: ^5.27.0 + checksum: 214bc0f3b018f8c374f79b9fa16da43df78c7fef2261e9a99e36c2f8387601fad10ac75a171aa8edba75903db214bc46952ae08b94a1f8544bd146c2c8d07d27 + languageName: node + linkType: hard + "styled-components@npm:^5.3.5": version: 5.3.11 resolution: "styled-components@npm:5.3.11" @@ -21770,7 +21864,7 @@ __metadata: languageName: node linkType: hard -"vm-browserify@npm:^1.0.1": +"vm-browserify@npm:^1.0.1, vm-browserify@npm:^1.1.2": version: 1.1.2 resolution: "vm-browserify@npm:1.1.2" checksum: 0cc1af6e0d880deb58bc974921320c187f9e0a94f25570fca6b1bd64e798ce454ab87dfd797551b1b0cc1849307421aae0193cedf5f06bdb5680476780ee344b @@ -22679,6 +22773,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.5.0": + version: 8.5.0 + resolution: "ws@npm:8.5.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 0baeee03e97865accda8fad51e8e5fa17d19b8e264529efdf662bbba2acc1c7f1de8316287e6df5cb639231a96009e6d5234b57e6ff36ee2d04e49a0995fec2f + languageName: node + linkType: hard + "ws@npm:^7, ws@npm:^7.2.0, ws@npm:^7.3.1": version: 7.5.10 resolution: "ws@npm:7.5.10"