From e1083c83aec536ed1e514e61e9bc203119f758a9 Mon Sep 17 00:00:00 2001 From: Mitchell Scott <10804314+rmitchellscott@users.noreply.github.com> Date: Thu, 13 Apr 2023 11:43:52 -0600 Subject: [PATCH] Add dockerfile and build --- .dockerignore | 3 ++ .github/workflows/build-deploy.yaml | 68 ++++++++++++++++++++++++++++ Dockerfile | 4 ++ server/images/Logo3-OG.png | Bin 0 -> 4839 bytes server/images/Logo3.png | Bin 4839 -> 8771 bytes 5 files changed, 75 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/build-deploy.yaml create mode 100644 Dockerfile create mode 100644 server/images/Logo3-OG.png diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..40afce8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +.git/ +Dockerfile +.vscode/ \ No newline at end of file diff --git a/.github/workflows/build-deploy.yaml b/.github/workflows/build-deploy.yaml new file mode 100644 index 0000000..d43ff45 --- /dev/null +++ b/.github/workflows/build-deploy.yaml @@ -0,0 +1,68 @@ +name: cd +on: push + +env: + DEPLOYMENT: weatherstar + YAMLPATH: clusters/home-kluster/apps/weatherstar/weatherstar/app/deployment.yaml + +jobs: + build: + name: Build Image + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - id: short-sha + uses: benjlevesque/short-sha@v1.2 + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: | + ghcr.io/rmitchellscott/ws4kp + tags: | + type=raw,priority=1000,value=latest,enable=${{ github.ref == 'refs/heads/main' }} + type=ref,event=branch + ${{ steps.short-sha.outputs.sha }} + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and Push + id: docker_build + uses: docker/build-push-action@v3 + with: + context: . + pull: true + push: ${{ github.ref == 'refs/heads/main' }} + platforms: linux/amd64 + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + # deploy: + # runs-on: ubuntu-latest + # name: Deploy to flux + # needs: build + # steps: + # - name: Check out Kubernetes repo + # uses: actions/checkout@v3 + # with: + # repository: rmitchellscott/kubernetes-apps + # token: ${{ secrets.PAT }} + # - id: short-sha + # uses: benjlevesque/short-sha@v1.2 + # - name: Replace the image tag + # env: + # TAG: ${{ steps.short-sha.outputs.sha }} + # run: yq -i e '(select(.kind=="Deployment" and .metadata.name==env(DEPLOYMENT)) | .spec.template.spec.containers.[].image) |= split(":").0 + ":" + env(TAG)' $YAMLPATH + # - name: Commit and push + # uses: stefanzweifel/git-auto-commit-action@v4 + # with: + # commit_message: Update image tag for ${{env.DEPLOYMENT}} to ${{ steps.short-sha.outputs.sha }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..cde0498 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM node:18-alpine +COPY . . +RUN npm install +CMD ["node", "index.js"] \ No newline at end of file diff --git a/server/images/Logo3-OG.png b/server/images/Logo3-OG.png new file mode 100644 index 0000000000000000000000000000000000000000..cce7cd45fb6874abad94087ce23763bd632a41ce GIT binary patch literal 4839 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 N002ovPDHLkV1k%LV~YR) literal 0 HcmV?d00001 diff --git a/server/images/Logo3.png b/server/images/Logo3.png index cce7cd45fb6874abad94087ce23763bd632a41ce..dc4e2bc40463ce05933ddeb06ab2e948a81cdf2a 100644 GIT binary patch literal 8771 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 N002ovPDHLkV1k%LV~YR)