diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..5f3ca48 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,64 @@ +name: Build and push Docker images + +on: + push: + branches: + - master + - dev + tags: + - 'v*' + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} +jobs: + build-docker-images: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + strategy: + fail-fast: false + matrix: + node-js-image-version: [20] + subql-node-image-version: [v4.7.0] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Log in to Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: Set image label for the master branch + if: ${{ github.ref_type == 'branch' && github.ref_name == 'master' }} + run: | + echo "IMAGE_LABEL=latest" >> "$GITHUB_ENV" + - name: Set image label for a tag or other branches + if: ${{ github.ref_type == 'tag' || (github.ref_type == 'branch' && github.ref_name != 'master') }} + run: | + echo "IMAGE_LABEL=${{ github.ref_name }}" >> "$GITHUB_ENV" + - name: Set full name of the Docker image + run: | + echo "FULL_IMAGE_NAME=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_LABEL }}-node-js-${{ matrix.node-js-image-version }}-subql-node-${{ matrix.subql-node-image-version }}" >> "$GITHUB_ENV" + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + file: docker/subql-node-Dockerfile + push: true + load: true + labels: ${{ steps.meta.outputs.labels }} + build-args: | + NODE_JS_IMAGE_VERSION=${{ matrix.node-js-image-version }}-alpine + SUBQL_NODE_IMAGE_VERSION=${{ matrix.subql-node-image-version }} + tags: ${{ env.FULL_IMAGE_NAME }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index a7cf1a6..44f0a2d 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1,19 +1,19 @@ -name: PR +name: PR check on: pull_request: - paths-ignore: - - ".github/workflows/**" + jobs: pr: - name: pr + name: build project runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup Node.js environment - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: 16 - - run: yarn + node-version: 20 + - name: Install + run: yarn install - name: Codegen run: yarn codegen - name: Build diff --git a/docker/subql-node-Dockerfile b/docker/subql-node-Dockerfile new file mode 100644 index 0000000..278e4fe --- /dev/null +++ b/docker/subql-node-Dockerfile @@ -0,0 +1,12 @@ +ARG NODE_JS_IMAGE_VERSION=20-alpine +ARG SUBQL_NODE_IMAGE_VERSION=v4.7.0 + +FROM node:${NODE_JS_IMAGE_VERSION} AS build + +ADD . /project +WORKDIR /project +RUN yarn install && yarn codegen && yarn build + +FROM onfinality/subql-node:${SUBQL_NODE_IMAGE_VERSION} + +COPY --from=build /project /project