name: release apps

on:
  push:
    branches-ignore:
      - '**'
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'
jobs:
  push_to_npm:
    name: Push module to npm
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2

      - name: Set env
        run: echo "TAG_VALUE=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV

      - name: Setup Node
        uses: actions/setup-node@v2
        with:
          node-version: '14'
          registry-url: 'https://registry.npmjs.org'
          scope: '@chip-in'

      - name: build
        run: |
          npm ci
          npm run clean
          npm run release_build

      - name: list all tag
        run: |
          echo 'TAG_LIST<<EOF' >> $GITHUB_ENV
          git -c 'versionsort.suffix=-' ls-remote --tags --sort='-v:refname' --refs origin | sed -e "s/^.*refs\/tags\///g" | head -n 20 >> $GITHUB_ENV
          echo 'EOF' >> $GITHUB_ENV

      - name: Check is latest tag
        run: |
          echo 'IS_PREVIOUS_VERSION<<EOF' >> $GITHUB_ENV
          npx semver -r ">${{env.TAG_VALUE}}" ${TAG_LIST} | wc -l >> $GITHUB_ENV
          echo 'EOF' >> $GITHUB_ENV

      - name: release latest
        if: "env.IS_PREVIOUS_VERSION == '0'"
        run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: Resolve minor version
        if: "env.IS_PREVIOUS_VERSION != '0'"
        run: |
          VERSION=${{env.TAG_VALUE}}
          MINOR=${VERSION%.*}
          echo "NPM_TAG_VALUE=stable-${MINOR#v}" >> $GITHUB_ENV

      - name: release stable
        if: "env.IS_PREVIOUS_VERSION != '0'"
        run: npm publish --tag ${{ env.NPM_TAG_VALUE }}
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

  push_to_dockerhub:
    name: Push Docker image to Docker Hub
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2

      - name: Set env
        run: echo "TAG_VALUE=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV

      - name: Log in to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: list all tag
        run: |
          echo 'TAG_LIST<<EOF' >> $GITHUB_ENV
          git -c 'versionsort.suffix=-' ls-remote --tags --sort='-v:refname' --refs origin | sed -e "s/^.*refs\/tags\///g" | head -n 20 >> $GITHUB_ENV
          echo 'EOF' >> $GITHUB_ENV

      - name: Check is latest tag
        run: |
          echo 'IS_PREVIOUS_VERSION<<EOF' >> $GITHUB_ENV
          npx semver -r ">${{env.TAG_VALUE}}" ${TAG_LIST} | wc -l >> $GITHUB_ENV
          echo 'EOF' >> $GITHUB_ENV

      - name: Extract metadata (tags, labels) for Docker for latest
        if: "env.IS_PREVIOUS_VERSION == '0'"
        id: meta
        uses: docker/metadata-action@v3
        with:
          images: chipin/dadget
          tags: |
            type=semver,pattern={{major}}
            type=semver,pattern={{major}}.{{minor}}
            type=semver,pattern={{version}}
            type=raw,value=latest

      - name: Build and push Docker image for latest
        if: "env.IS_PREVIOUS_VERSION == '0'"
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}

      - name: Resolve minor version
        if: "env.IS_PREVIOUS_VERSION != '0'"
        run: |
          VERSION=${{env.TAG_VALUE}}
          MINOR=${VERSION%.*}
          echo "DOCKER_TAG_VALUE=${MINOR#v}" >> $GITHUB_ENV

      - name: Extract metadata (tags, labels) for Docker for stable
        if: "env.IS_PREVIOUS_VERSION != '0'"
        id: metastable
        uses: docker/metadata-action@v3
        with:
          images: chipin/dadget
          flavor: |
            latest=false
          tags: |
            type=semver,pattern={{version}}
            type=raw,value=${{ env.DOCKER_TAG_VALUE }}
            type=raw,value=latest,enable=false

      - name: Build and push Docker image for stable
        if: "env.IS_PREVIOUS_VERSION != '0'"
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: ${{ steps.metastable.outputs.tags }}

  push_server_to_dockerhub:
    name: Push Docker image to Docker Hub
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2

      - name: Set env
        run: echo "TAG_VALUE=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV

      - name: Log in to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: list all tag
        run: |
          echo 'TAG_LIST<<EOF' >> $GITHUB_ENV
          git -c 'versionsort.suffix=-' ls-remote --tags --sort='-v:refname' --refs origin | sed -e "s/^.*refs\/tags\///g" | head -n 20 >> $GITHUB_ENV
          echo 'EOF' >> $GITHUB_ENV

      - name: Check is latest tag
        run: |
          echo 'IS_PREVIOUS_VERSION<<EOF' >> $GITHUB_ENV
          npx semver -r ">${{env.TAG_VALUE}}" ${TAG_LIST} | wc -l >> $GITHUB_ENV
          echo 'EOF' >> $GITHUB_ENV

      - name: Extract metadata (tags, labels) for Docker for latest
        if: "env.IS_PREVIOUS_VERSION == '0'"
        id: meta
        uses: docker/metadata-action@v3
        with:
          images: chipin/rn-mongodb-dadget
          tags: |
            type=semver,pattern={{major}}
            type=semver,pattern={{major}}.{{minor}}
            type=semver,pattern={{version}}
            type=raw,value=latest

      - name: Build and push Docker image for latest
        if: "env.IS_PREVIOUS_VERSION == '0'"
        uses: docker/build-push-action@v2
        with:
          context: .
          file: docker-server/Dockerfile
          push: true
          tags: ${{ steps.meta.outputs.tags }}

      - name: Resolve minor version
        if: "env.IS_PREVIOUS_VERSION != '0'"
        run: |
          VERSION=${{env.TAG_VALUE}}
          MINOR=${VERSION%.*}
          echo "DOCKER_TAG_VALUE=${MINOR#v}" >> $GITHUB_ENV

      - name: Extract metadata (tags, labels) for Docker for stable
        if: "env.IS_PREVIOUS_VERSION != '0'"
        id: metastable
        uses: docker/metadata-action@v3
        with:
          images: chipin/rn-mongodb-dadget
          flavor: |
            latest=false
          tags: |
            type=semver,pattern={{version}}
            type=raw,value=${{ env.DOCKER_TAG_VALUE }}
            type=raw,value=latest,enable=false

      - name: Build and push Docker image for stable
        if: "env.IS_PREVIOUS_VERSION != '0'"
        uses: docker/build-push-action@v2
        with:
          context: .
          file: docker-server/Dockerfile
          push: true
          tags: ${{ steps.metastable.outputs.tags }}
