name: CI

on: [push, pull_request]

env:
  TZ: Asia/Shanghai

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v1
    - uses: actions/cache@v2
      id: cache
      with:
        path: node_modules
        key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
    - run: yarn install --frozen-lockfile
      if: steps.cache.outputs.cache-hit != 'true'

    - run: yarn run lint --no-fix --max-warnings 0
    - run: yarn run test:unit
      
  build:
    needs: [test]
    runs-on: ubuntu-latest
    if: github.event_name == 'push' && github.ref == 'refs/heads/release'
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v1
      - uses: actions/cache@v2
        id: cache
        with:
          path: node_modules
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
      - run: yarn install --frozen-lockfile
        if: steps.cache.outputs.cache-hit != 'true'

      - run: echo ::set-env name=RELEASE_DATE::$(date +'%Y%m%d')
      - run: echo ::set-env name=GIT_TAG::nightly-$RELEASE_DATE
      - run: echo ::set-env name=RELEASE_FILE::qb-web-$GIT_TAG.zip

      - name: Pack Release
        run: |
          yarn run build
          # see https://github.com/qbittorrent/qBittorrent/pull/10485, fixed in qb v4.2.0
          cp dist/public/{index,login}.html
          cp INSTALL.md dist
          zip -r $RELEASE_FILE dist

      - name: Publish
        run: |
          cd dist/public
          git init
          git config user.name ${{ github.actor }}
          git config user.email ${{ github.actor }}@users.noreply.github.com
          git remote add origin https://x-access-token:${{ github.token }}@github.com/${{ github.repository }}.git
          git checkout -b gh-pages
          git add --all
          git commit -m "Publish"
          git push origin gh-pages -f

      - name: Add tag
        run: |
          git tag $GIT_TAG
          git push origin $GIT_TAG
      - id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ env.GIT_TAG }}
          release_name: ${{ env.GIT_TAG }}
          prerelease: true
      - uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ${{ env.RELEASE_FILE }}
          asset_name: ${{ env.RELEASE_FILE }}
          asset_content_type: application/zip
