name: Build dlc.dat
on:
  push:
    branches:
      - master
    paths-ignore:
      - "**/README.md"
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest

    steps:
      - name: Setup Go
        uses: actions/setup-go@v3
        with:
          go-version: 1.18

      - name: Set variables
        run: |
          echo "RELEASE_NAME=$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV
          echo "TAG_NAME=$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV
        shell: bash

      - name: Checkout codebase
        uses: actions/checkout@v3
        with:
          path: code

      - name: Build dlc.dat file
        run: |
          cd code || exit 1
          go run ./ --outputdir=../ --exportlists=category-ads-all,tld-cn,cn,tld-\!cn,geolocation-\!cn,apple,icloud
          cd ../ && rm -rf code

      - name: Generate dlc.dat sha256 hash
        run: |
          sha256sum dlc.dat > dlc.dat.sha256sum

      - name: Generate Zip
        run: |
          zip -9 dlc.dat.zip dlc.dat
          sha256sum dlc.dat.zip > dlc.dat.zip.sha256sum

      - name: Generate XZ
        run: |
          xz -z -9 -k dlc.dat
          sha256sum dlc.dat.xz > dlc.dat.xz.sha256sum

      - name: Git push assets to "release" branch
        run: |
          git init
          git config --local user.name "github-actions[bot]"
          git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git checkout -b release
          git add *.txt *.sha256sum dlc.dat dlc.dat.zip dlc.dat.xz
          git commit -m "${{ env.RELEASE_NAME }}"
          git remote add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}"
          git push -f -u origin release

      - name: Create a release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ env.TAG_NAME }}
          release_name: ${{ env.RELEASE_NAME }}
          draft: false
          prerelease: false

      - name: Upload dlc.dat
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dlc.dat
          asset_name: dlc.dat
          asset_content_type: application/octet-stream

      - name: Upload dlc.dat sha256sum
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dlc.dat.sha256sum
          asset_name: dlc.dat.sha256sum
          asset_content_type: text/plain

      - name: Upload dlc.dat.zip
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dlc.dat.zip
          asset_name: dlc.dat.zip
          asset_content_type: application/octet-stream

      - name: Upload dlc.dat.zip sha256sum
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dlc.dat.zip.sha256sum
          asset_name: dlc.dat.zip.sha256sum
          asset_content_type: text/plain

      - name: Upload dlc.dat.xz
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dlc.dat.xz
          asset_name: dlc.dat.xz
          asset_content_type: application/octet-stream

      - name: Upload dlc.dat.xz sha256sum
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./dlc.dat.xz.sha256sum
          asset_name: dlc.dat.xz.sha256sum
          asset_content_type: text/plain
