name: release

on:
  push:
    # Sequence of patterns matched against refs/tags
    tags:
      - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10

jobs:
  create_release:
    name: Create release
    runs-on: ubuntu-latest
    steps:
      - name: Create release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref }}

  npm_publish:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
    # Setup .npmrc file to publish to npm
    - uses: actions/setup-node@v6
      with:
        node-version: '22.x'
        registry-url: 'https://registry.npmjs.org'
    - run: npm install
    - run: npm run lint
    - run: npm run test
    - run: npm run tsc
    - run: npm publish --access public
      env:
        NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

  linux:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout reposistory
      uses: actions/checkout@v6
    - name: Checkout submodules
      run: git submodule update --init --recursive
    - name: Use Node.js
      env:
        DEFAULT_DELAY: 50
      uses: actions/setup-node@v6
      with:
        node-version: '22.x'
    - run: npm install
    - run: npm run lint
    - run: npm run test
    - run: bash ./scripts/package.sh true true
    - name: Upload Release Asset
      uses: alexellis/upload-assets@0.2.2
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        asset_paths: '["build/*/*.tar.gz"]'

  windows:
    runs-on: windows-latest
    steps:
    - name: Checkout reposistory
      uses: actions/checkout@v6
    - name: Checkout submodules
      run: git submodule update --init --recursive
    - name: Use Node.js
      env:
        DEFAULT_DELAY: 50
      uses: actions/setup-node@v6
      with:
        node-version: '22.x'
    - run: npm install
    - run: npm run lint
    - run: npm run test
    - run: bash ./scripts/package.sh true true
    - name: Upload Release Asset
      uses: alexellis/upload-assets@0.2.2
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        asset_paths: '["build/*/*.zip"]'

  macos:
    runs-on: macos-latest
    steps:
    - name: Checkout reposistory
      uses: actions/checkout@v6
    - name: Checkout submodules
      run: git submodule update --init --recursive
    - name: Use Node.js
      env:
        DEFAULT_DELAY: 50
      uses: actions/setup-node@v6
      with:
        node-version: '22.x'
    - run: npm install
    - run: npm run lint
    - run: npm run test
    - run: bash ./scripts/package.sh true true
    - name: Upload Release Asset
      uses: alexellis/upload-assets@0.2.2
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        asset_paths: '["build/*/*.pkg"]'

  docker-amd:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
    - name: Log in to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}
    - name: Extract metadata (tags, labels) for Docker
      id: meta
      uses: docker/metadata-action@v4
      with:
        images: deepstreamio/deepstream.io
        flavor: |
          latest=true
        tags: |
          type=semver,pattern={{version}}
    - name: Build and push Docker image
      uses: docker/build-push-action@v4
      with:
        context: .
        file: Dockerfile
        push: true
        platforms: linux/amd64
        tags: ${{ steps.meta.outputs.tags }}
        labels: ${{ steps.meta.outputs.labels }}

  docker-arm:
    runs-on: ubuntu-latest
    steps:
    - uses: docker/setup-qemu-action@v1
    - uses: docker/setup-buildx-action@v1
    - uses: actions/checkout@v6
    - name: Log in to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}
    - name: Extract metadata (tags, labels) for Docker
      id: meta
      uses: docker/metadata-action@v4
      with:
        images: deepstreamio/deepstream.io
        flavor: |
          latest=true
        tags: |
          type=semver,pattern={{version}}
    - name: Build and push Docker image
      uses: docker/build-push-action@v4
      with:
        context: .
        file: Dockerfile
        push: true
        platforms: linux/arm64
        tags: ${{ steps.meta.outputs.tags }}
        labels: ${{ steps.meta.outputs.labels }}

  docker-alpine:
    runs-on: ubuntu-latest
    steps:
    - uses: docker/setup-qemu-action@v1
    - uses: docker/setup-buildx-action@v1
    - uses: actions/checkout@v6
    - name: Log in to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}
    - name: Extract metadata (tags, labels) for Docker
      id: meta
      uses: docker/metadata-action@v4
      with:
        images: deepstreamio/deepstream.io
        flavor: |
          latest=true
          suffix=-alpine,onlatest=true
        tags: |
          type=semver,pattern={{version}}
    - name: Build and push Docker image
      uses: docker/build-push-action@v4
      with:
        context: .
        file: Dockerfile.alpine
        push: true
        platforms: linux/amd64,linux/arm64
        tags: ${{ steps.meta.outputs.tags }}
        labels: ${{ steps.meta.outputs.labels }}
