diff --git a/.github/workflows/push-docker-images.yaml b/.github/workflows/push-docker-images.yaml new file mode 100644 index 0000000000..c5a85c4266 --- /dev/null +++ b/.github/workflows/push-docker-images.yaml @@ -0,0 +1,74 @@ +# This workflow pushes osmosis docker images on every commit to master. +# +# The following images are pushed: +# +# - `osmolabs/osmosis-frontend:{COMMIT_SHORT_SHA} +# - `osmolabs/osmosis-frontend-frontier:{COMMIT_SHORT_SHA} +# - `osmolabs/osmosis-frontend-testnet:{COMMIT_SHORT_SHA} +# +# All the images above have support for linux/amd64 and linux/arm64. +# +# Due to QEMU virtualization used to build multi-platform docker images +# this workflow might take a while to complete. + +name: Push Docker Images + +on: + push: + branches: + - master + +env: + FRONTEND_DOCKER_REPOSITORY: osmolabs/osmosis-frontend + FRONTIER_DOCKER_REPOSITORY: osmolabs/osmosis-frontend-frontier + TESTNET_DOCKER_REPOSITORY: osmolabs/osmosis-frontend-testnet + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - + name: Check out repo + uses: actions/checkout@v3 + - + name: Get Short SHA + uses: benjlevesque/short-sha@v2.1 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - + name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Build and push (main) + uses: docker/build-push-action@v3 + with: + file: ./docker/Dockerfile + context: . + push: true + platforms: linux/amd64,linux/arm64 + tags: ${{ env.FRONTEND_DOCKER_REPOSITORY }}:${{ env.SHA }}, ${{ env.FRONTEND_DOCKER_REPOSITORY }}:latest + - + name: Build and push (frontier) + uses: docker/build-push-action@v3 + with: + file: ./docker/Dockerfile.frontier + context: . + push: true + platforms: linux/amd64,linux/arm64 + tags: ${{ env.FRONTIER_DOCKER_REPOSITORY }}:${{ env.SHA }}, ${{ env.FRONTIER_DOCKER_REPOSITORY }}:latest + - + name: Build and push (testnet) + uses: docker/build-push-action@v3 + with: + file: ./docker/Dockerfile.testnet + context: . + push: true + platforms: linux/amd64,linux/arm64 + tags: ${{ env.TESTNET_DOCKER_REPOSITORY }}:${{ env.SHA }}, ${{ env.TESTNET_DOCKER_REPOSITORY }}:latest diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index bab2188292..0000000000 --- a/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM node:14.19.1 as build - -WORKDIR /usr/src/app - -COPY . . - -RUN npm install -g npm@8.10.0 - -RUN yarn -RUN yarn build - -FROM node:14.19.1-alpine - -WORKDIR /usr/src/app - -COPY --from=build /usr/src/app . - -EXPOSE 3000 - -CMD [ "yarn", "start" ] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index a5c2f59e83..0000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: '3.5' - -services: - app: - build: - context: . - dockerfile: ./Dockerfile - ports: - - '3000:3000' \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000..dfb0572903 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,17 @@ +FROM node:18 as build + +WORKDIR /app + +COPY lerna.json package.json tsconfig.json yarn.lock /app/ +COPY packages /app/packages/ + +RUN yarn +RUN yarn build + +FROM node:18-alpine3.15 + +WORKDIR /app +COPY --from=build /app . + +EXPOSE 3000 +CMD [ "yarn", "start" ] diff --git a/docker/Dockerfile.frontier b/docker/Dockerfile.frontier new file mode 100644 index 0000000000..0dbfb14199 --- /dev/null +++ b/docker/Dockerfile.frontier @@ -0,0 +1,17 @@ +FROM node:18 as build + +WORKDIR /app + +COPY lerna.json package.json tsconfig.json yarn.lock /app/ +COPY packages /app/packages/ + +RUN yarn +RUN yarn build:frontier + +FROM node:18-alpine3.15 + +WORKDIR /app +COPY --from=build /app . + +EXPOSE 3000 +CMD [ "yarn", "start:frontier" ] diff --git a/docker/Dockerfile.testnet b/docker/Dockerfile.testnet new file mode 100644 index 0000000000..aeb03fe19f --- /dev/null +++ b/docker/Dockerfile.testnet @@ -0,0 +1,17 @@ +FROM node:18 as build + +WORKDIR /app + +COPY lerna.json package.json tsconfig.json yarn.lock /app/ +COPY packages /app/packages/ + +RUN yarn +RUN yarn build:testnet + +FROM node:18-alpine3.15 + +WORKDIR /app +COPY --from=build /app . + +EXPOSE 3000 +CMD [ "yarn", "start:testnet" ] diff --git a/docker/Makefile b/docker/Makefile new file mode 100644 index 0000000000..b5f7bd1da6 --- /dev/null +++ b/docker/Makefile @@ -0,0 +1,11 @@ +frontend: + docker-compose up + +frontier: + docker-compose -profile frontier up + +testnet: + docker-compose -profile testnet up + +all: + docker-compose -profile all up \ No newline at end of file diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 0000000000..f3ab7cc356 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,57 @@ +# Docker + +There are three different frontend flavours: + +- Main +- Frontier +- Testnet + +## Run main frontend + +```bash +make frontend +``` + +Browse to [http://localhost:3000/](http://localhost:3000/) + +## Run frontier + +```bash +make frontier +``` + +Browse to [http://localhost:3001/](http://localhost:3001/) + +## Run testnet + +```bash +make testnet +``` + +Browse to [http://localhost:3002/](http://localhost:3002/) + +## Run all + +You can run them all with `make all` + +## Build images + +In case you need to build images only: + +### Main + +```bash +docker-compose build frontend -t osmosis-frontend:main +``` + +### Frontier + +```bash +docker-compose build frontend-frontier -t osmosis-frontend:frontier +``` + +### Testnet + +```bash +docker-compose build frontend-testnet -t osmosis-frontend:testnet +``` diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000000..99b1c08f2c --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,33 @@ +version: '3.5' + +services: + + frontend: + build: + context: ../ + dockerfile: ./Dockerfile + ports: + - '3000:3000' + profiles: + - default + - all + + frontend-frontier: + build: + context: ../ + dockerfile: ./Dockerfile.frontier + ports: + - '3001:3000' + profiles: + - frontier + - all + + frontend-testnet: + build: + context: ../ + dockerfile: ./Dockerfile.testnet + ports: + - '3002:3000' + profiles: + - testnet + - all