.github/workflows/publish-pr.yml

Summary

Maintainability
Test Coverage
name: PR Publish

on:
  issue_comment:
    types: [created, edited]

jobs:
  publish-docker-images:
    if: ${{ github.event.issue.pull_request && github.event.comment.body  == '/publish' }}
    runs-on: ubuntu-22.04
    steps:
      - uses: xt0rted/pull-request-comment-branch@v2
        id: comment-branch

      - name: Check out repository
        uses: actions/checkout@v4
        with:
          ref: ${{ steps.comment-branch.outputs.head_ref }}

      - uses: gacts/github-slug@v1
        id: slug
        with:
          to-slug: ${{ steps.comment-branch.outputs.head_ref }}

      - name: Extract metadata (tags, labels) for Docker
        id: docker_metadata
        uses: docker/metadata-action@v5
        with:
          images: ghcr.io/${{ github.repository }}
          tags: |
            type=raw,value=${{ steps.slug.outputs.slug }}
          labels: |
            org.opencontainers.image.vendor=OKP4

      - name: Login to GHCR
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ secrets.DOCKER_REGISTRY_ID }}
          password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}

      - name: Build and publish image(s)
        uses: docker/build-push-action@v4
        with:
          context: .
          platforms: linux/amd64
          push: true
          tags: ${{ steps.docker_metadata.outputs.tags }}
          labels: ${{ steps.docker_metadata.outputs.labels }}

  publish-npm-package-okp4:
    if: ${{ github.event.issue.pull_request && github.event.comment.body  == '/publish' }}
    runs-on: ubuntu-22.04
    steps:
      - uses: xt0rted/pull-request-comment-branch@v2
        id: comment-branch

      - name: Check out repository
        uses: actions/checkout@v4
        with:
          ref: ${{ steps.comment-branch.outputs.head_ref }}

      - uses: gacts/github-slug@v1
        id: slug
        with:
          to-slug: ${{ steps.comment-branch.outputs.head_ref }}

      - name: Setup node environment (for publishing)
        uses: actions/setup-node@v4
        with:
          node-version: 16.14.0
          registry-url: "https://npm.pkg.github.com"
          scope: "@okp4"

      - name: Publish package
        run: |
          DATE=$(date +%Y%m%d%H%M%S)
          yarn && yarn build
          publish=(yarn publish --no-git-tag-version --non-interactive)
          publish+=(--prerelease --preid ${{ steps.slug.outputs.slug }}.$DATE --tag ${{ steps.slug.outputs.slug }})
          echo "🚀 Publishing npm package with following command line: ${publish[@]}"
          "${publish[@]}"
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_REGISTRY_TOKEN }}