name: Publish # Tag schemes: # v* -> publishes @flipt-io/mcp-server-flipt (v1, legacy scheme) # mcp-server-flipt-v2@* -> publishes @flipt-io/mcp-server-flipt-v2 on: push: tags: - 'v*' - 'mcp-server-flipt-v2@*' permissions: contents: read packages: write jobs: setup: runs-on: ubuntu-latest outputs: package: ${{ steps.parse.outputs.package }} version: ${{ steps.parse.outputs.version }} steps: - name: Parse tag id: parse run: | TAG="${GITHUB_REF_NAME}" if [[ "$TAG" == mcp-server-flipt-v2@* ]]; then echo "package=mcp-server-flipt-v2" >> "$GITHUB_OUTPUT" echo "version=${TAG#mcp-server-flipt-v2@}" >> "$GITHUB_OUTPUT" else echo "package=mcp-server-flipt" >> "$GITHUB_OUTPUT" echo "version=${TAG#v}" >> "$GITHUB_OUTPUT" fi npm: runs-on: ubuntu-latest needs: setup steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: pnpm registry-url: 'https://registry.npmjs.org' - name: Install dependencies run: pnpm install --frozen-lockfile - name: Build run: pnpm --filter "@flipt-io/${{ needs.setup.outputs.package }}" build - name: Publish to NPM run: pnpm --filter "@flipt-io/${{ needs.setup.outputs.package }}" publish --access public --no-git-checks env: NODE_AUTH_TOKEN: ${{ secrets.NPM_API_KEY }} docker: runs-on: ubuntu-latest needs: setup steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Docker Metadata id: meta uses: docker/metadata-action@v5 with: images: ghcr.io/flipt-io/${{ needs.setup.outputs.package }} - name: Build and Push uses: docker/build-push-action@v6 with: context: . file: Dockerfile push: true build-args: | PACKAGE=${{ needs.setup.outputs.package }} tags: | ghcr.io/flipt-io/${{ needs.setup.outputs.package }}:${{ needs.setup.outputs.version }} ghcr.io/flipt-io/${{ needs.setup.outputs.package }}:latest labels: ${{ steps.meta.outputs.labels }}