Skip to content

Commit

Permalink
feat: add Dockerfile and its release pipeline (#598)
Browse files Browse the repository at this point in the history
  • Loading branch information
Savio629 authored Jun 2, 2023
1 parent f4f0127 commit 1ec904e
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 1 deletion.
37 changes: 37 additions & 0 deletions .github/workflows/release-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Release Docker Image
on:
release:
types:
- published
jobs:

publish-docker:
name: Generating Docker
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Get version without v character
id: version
run: |
VERSION=${{github.event.release.tag_name}}
VERSION_WITHOUT_V=${VERSION:1}
echo "value=${VERSION_WITHOUT_V}" >> $GITHUB_OUTPUT
- name: Release to Docker
run: |
echo ${{secrets.DOCKER_PASSWORD}} | docker login -u ${{secrets.DOCKER_USERNAME}} --password-stdin
npm run docker:build
docker tag asyncapi/cli:latest asyncapi/cli:${{ steps.version.outputs.value }}
docker push asyncapi/cli:${{ steps.version.outputs.value }}
docker push asyncapi/cli:latest
- name : Sync README.md and Description to Docker Hub
uses: actions/checkout@master

- uses: meeDamian/[email protected]
with:
user: ${{secrets.DOCKER_USERNAME}}
pass: ${{ secrets.DOCKER_PASSWORD }}
slug: asyncapi/cli
description: true
24 changes: 24 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
FROM node:16-alpine

# Create a non-root user
RUN addgroup -S myuser && adduser -S myuser -G myuser

WORKDIR /app

# Since 0.14.0 release of html-template chromium is needed for pdf generation
ENV PUPPETEER_EXECUTABLE_PATH /usr/bin/chromium-browser
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
# Since 0.30.0 release Git is supported and required as a dependency
# Since 0.14.0 release of html-template chromium is needed for pdf generation.
# More custom packages for specific template should not be added to this dockerfile. Instead, we should come up with some extensibility solution.
RUN apk --update add git chromium && \
rm -rf /var/lib/apt/lists/* && \
rm /var/cache/apk/*

# Installing latest released npm package
RUN npm install --ignore-scripts -g @asyncapi/cli

# Switch to the non-root user
USER myuser

ENTRYPOINT [ "asyncapi" ]
24 changes: 24 additions & 0 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,30 @@ After installing Node.js and NPM, run the following command to install the Async
```sh
npm install -g @asyncapi/cli
```
## Docker

Install [Docker](https://docs.docker.com/get-docker/) first, then use docker to build the image using the following command :
```
docker build -t asyncapi/cli:latest .
```
and run the image using the following command :

```bash
docker run --rm -it \
--user=root \
-v [ASYNCAPI SPEC FILE LOCATION]:/app/asyncapi.yml \
-v [GENERATED FILES LOCATION]:/app/output \
asyncapi/cli [COMMAND HERE]

# Example that you can run inside the cli directory after cloning this repository. First, you specify the mount in the location of your AsyncAPI specification file and then you mount it in the directory where the generation result should be saved.
docker run --rm -it \
--user=root \
-v ${PWD}/test/fixtures/asyncapi_v1.yml:/app/asyncapi.yml \
-v ${PWD}/output:/app/output \
asyncapi/cli generate fromTemplate -o /app/output /app/asyncapi.yml @asyncapi/html-template --force-write
```
Note: Use ``` ` ``` instead of `\` for Windows.


## Mac
There are two ways to install the AsyncAPI CLI on your macOS: using the `brew` package manager or `pkg` files.
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@
"build": "rimraf lib && node scripts/fetch-asyncapi-example.js && tsc && echo \"Build Completed\"",
"bump:version": "npm --no-git-tag-version --allow-same-version version $VERSION",
"dev": "tsc --watch",
"docker:build": "docker build -t asyncapi/cli:latest .",
"generate:readme:create": "printf '\n\n# Usage\n\n<!-- usage -->\n\n# Commands\n\n<!-- commands -->\n' > scripts/README.md",
"generate:readme:commands": "npm run build && cd scripts && DEBUG=* oclif readme",
"generate:assets": "npm run generate:readme:toc && npm run generate:commands",
Expand All @@ -177,4 +178,4 @@
"get-version": "echo $npm_package_version"
},
"types": "lib/index.d.ts"
}
}

0 comments on commit 1ec904e

Please sign in to comment.