Skip to content

feat: docker support #238

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 21 commits into from
May 16, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions .github/workflows/docker.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# See RELEASING.md#DockerImage for more details about the steps in this workflow.
name: Daily Release AtlasCLI Docker Image
on:
schedule:
- cron: "0 1 * * *" # Every day at 1:00 AM
workflow_dispatch: # Run the action manually
pull_request: # TODO: delete this before merging
jobs:
build_images:
name: Build and publish docker image to staging registry
runs-on: ubuntu-latest
env:
IMAGE_REPOSITORY: docker.io/mongodb/apix_test
TAG_PREFIX: mongodb-mcp-server
steps:
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
with:
config: ${{ vars.PERMISSIONS_CONFIG }}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this? Doesn't seem like it's created.

Copy link
Collaborator Author

@fmenezes fmenezes May 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to https://github.com/GitHubSecurityLab/actions-permissions/tree/v1/monitor, it is advisable to keep a variable even if it does not exist yet.

- name: Check out code
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set properties
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nit] This name is a bit vague, forcing readers to actually read the script being executed - would it make sense to replace with "Set date and version"?

id: set-properties
run: |
DATE=$(date +'%Y-%m-%d')
VERSION=$(npm pkg get version | tr -d '"')
echo "DATE=${DATE}" >> "$GITHUB_OUTPUT"
echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2
- name: Login to Docker Hub
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d
with:
username: "${{ secrets.DOCKERHUB_USER }}"
password: "${{ secrets.DOCKERHUB_SECRET }}"
- name: Build and push image to dockerhub staging registry
uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1
with:
context: .
platforms: linux/amd64,linux/arm64
tags:
${{ env.IMAGE_REPOSITORY }}:${{ env.TAG_PREFIX }}${{ steps.set-properties.outputs.VERSION }}, ${{ env.IMAGE_REPOSITORY }}:${{ env.TAG_PREFIX }}${{ steps.set-properties.outputs.VERSION }}-${{ steps.set-properties.outputs.DATE }}
file: Dockerfile
push: true
# - name: Create Issue
# if: ${{ failure() }}
# uses: imjohnbo/issue-bot@572eed14422c4d6ca37e870f97e7da209422f5bd
# with:
# labels: failed-release
# title: Release Failure for Atlas CLI Docker Image ${{ env.TAG_PREFIX }}${{ steps.set-properties.outputs.VERSION }}-${{ steps.set-properties.outputs.DATE }}
# body: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
15 changes: 15 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM node:22 AS build
WORKDIR /app
COPY package.json package-lock.json tsconfig.build.json ./
RUN npm install --ignore-scripts
COPY src src
RUN npm run build

FROM node:22
WORKDIR /app
COPY --from=build /app/package.json /app/package.json
COPY --from=build /app/package-lock.json /app/package-lock.json
COPY --from=build /app/dist dist
RUN npm ci --omit=dev --ignore-scripts
ENV NODE_ENV=production
CMD ["node", "dist/index.js"]
Loading