Update Docker config build

This commit is contained in:
Charlie Laabs
2021-12-27 11:46:10 -06:00
parent 2840d2b2a3
commit 101f55c1b8
4 changed files with 62 additions and 38 deletions

View File

@@ -1,7 +1,3 @@
# Ignore everything
**/*
# Allow files and directories
!*.js
!*.json
!*.ts
config
dist
node_modules

View File

@@ -1,26 +1,32 @@
name: Build and push image
name: MultiArchDockerBuild
on:
push:
branches:
- master
- develop
jobs:
build_and_push_image:
name: Build Docker image and push to registries
build_multi_arch_image:
name: Build multi-arch Docker image.
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
with:
install: true
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: charlocharlie
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
@@ -30,15 +36,32 @@ jobs:
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
id: docker_build_push
- name: Build and push master
if: ${{ github.ref == 'refs/heads/master' }}
uses: docker/build-push-action@v2
with:
target: deploy
push: true
tags: |
charlocharlie/markov-discord:latest
ghcr.io/${{ github.repository }}:latest
ghcr.io/${{ github.repository }}:${{ github.sha }}
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
build-args: |
COMMIT_SHA=${{ github.sha }}
cache-from: type=gha,scope=${{ github.workflow }}
cache-to: type=gha,mode=max,scope=${{ github.workflow }}
- name: Image digest
run: echo ${{ steps.docker_build_push.outputs.digest }}
- name: Build and push dev
if: ${{ github.ref == 'refs/heads/develop' }}
uses: docker/build-push-action@v2
with:
target: deploy
push: true
tags: |
charlocharlie/epicgames-freegames:dev
ghcr.io/claabs/epicgames-freegames-node:dev
platforms: linux/amd64
build-args: |
COMMIT_SHA=${{ github.sha }}
cache-from: type=gha,scope=${{ github.workflow }}
cache-to: type=gha,mode=max,scope=${{ github.workflow }}

View File

@@ -2,45 +2,49 @@
# BASE
########
FROM node:16-alpine3.14 as base
WORKDIR /usr/src/app
COPY package*.json ./
# Install build tools for erlpack, then install prod deps only, then remove build tools
RUN apk add --no-cache make gcc g++ python && \
npm ci --only=production && \
apk del make gcc g++ python
WORKDIR /usr/src/app
########
# BUILD
########
FROM base as build
# Copy all *.json, *.js, *.ts
COPY . .
# Prod deps already installed, add dev deps
RUN npm i
COPY package*.json ./
# Install build tools for erlpack, then install prod deps only
RUN apk add --no-cache make gcc g++ python3 \
&& npm ci --only=production
# Copy all jsons
COPY package*.json tsconfig.json ./
# Add dev deps
RUN npm ci
# Copy source code
COPY src src
RUN npm run build
########
# DEPLOY
########
FROM node:16-alpine3.14 as deploy
WORKDIR /usr/src/app
ENV NPM_CONFIG_LOGLEVEL warn
FROM base as deploy
# Steal node_modules from base image
COPY --from=base /usr/src/app/node_modules ./node_modules/
COPY --from=build /usr/src/app/node_modules node_modules
# Steal compiled code from build image
COPY --from=build /usr/src/app/dist ./
COPY --from=build /usr/src/app/dist dist
# Copy package.json for version number
COPY package*.json ./
COPY package*.json ormconfig.js ./
RUN mkdir config
# RUN mkdir config
# RUN ls -al
ARG COMMIT_SHA=""
CMD [ "pm2-runtime", "start", "ecosystem.config.js" ]
ENV NODE_ENV=production \
COMMIT_SHA=${COMMIT_SHA}
CMD [ "node", "/usr/src/app/dist/index.js" ]

View File

@@ -2,13 +2,14 @@
"name": "markov-discord",
"version": "2.0.0",
"description": "A conversational Markov chain bot for Discord",
"main": "index.js",
"main": "dist/index.js",
"scripts": {
"start": "node dist/index.js",
"start:ts": "ts-node src/index.ts",
"build": "rimraf dist && tsc",
"lint": "tsc --noEmit && eslint **/*.ts *.js",
"docker-up": "docker run --rm -e TOKEN=abc123 -it $(docker build -q .)"
"docker:build": "docker build . -t charlocharlie/markov-discord:latest --target deploy",
"docker:run": "docker run --rm -ti -v $(pwd)/config:/usr/src/app/config charlocharlie/markov-discord:latest"
},
"repository": "https://github.com/claabs/markov-discord.git",
"keywords": [