# Copyright 2023 Google Inc. All Rights Reserved.
#
# Distributed under MIT license.
# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT

# Workflow for building the release binaries.

name: Release build / deploy
on:
  push:
    branches:
      - master
      - v*.*.*
  release:
    types: [ published ]
  pull_request:
    types: [opened, reopened, labeled, synchronize]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
  windows_build:
    name: Windows Build (vcpkg / ${{ matrix.triplet }})
    runs-on: ${{ matrix.runs_on }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - triplet: x86-windows-dynamic
            arch: '-A Win32'
            build_shared_libs: 'ON'
            runs_on: windows-latest
          - triplet: x64-windows-dynamic
            arch: '-A x64'
            build_shared_libs: 'ON'
            runs_on: windows-latest
          - triplet: arm64-windows-dynamic
            arch: '-A ARM64'
            build_shared_libs: 'ON'
            runs_on: windows-11-arm
          - triplet: x86-windows-static
            arch: '-A Win32'
            build_shared_libs: 'OFF'
            runs_on: windows-latest
          - triplet: x64-windows-static
            arch: '-A x64'
            build_shared_libs: 'OFF'
            runs_on: windows-latest
          - triplet: arm64-windows-static
            arch: '-A ARM64'
            build_shared_libs: 'OFF'
            runs_on: windows-11-arm

    env:
      VCPKG_VERSION: '2022.11.14'
      VCPKG_ROOT: vcpkg
      VCPKG_DISABLE_METRICS: 1

    steps:
    - name: Checkout the source
      uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
      with:
        submodules: false
        fetch-depth: 1

    - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
      id: cache-vcpkg
      with:
        path: vcpkg
        key: release-${{ runner.os }}-vcpkg-${{ env.VCPKG_VERSION }}-${{ matrix.triplet }}

    - name: Download vcpkg
      if: steps.cache-vcpkg.outputs.cache-hit != 'true'
      shell: 'powershell'
      run: |
        Invoke-WebRequest -Uri "https://github.com/microsoft/vcpkg/archive/refs/tags/${{ env.VCPKG_VERSION }}.zip" -OutFile "vcpkg.zip"
        
    - name: Bootstrap vcpkg
      if: steps.cache-vcpkg.outputs.cache-hit != 'true'
      shell: 'bash'
      run: |
        set -x
        unzip -q vcpkg.zip
        rm -rf ${VCPKG_ROOT}
        mv vcpkg-${VCPKG_VERSION} ${VCPKG_ROOT}
        ${VCPKG_ROOT}/bootstrap-vcpkg.sh

    - name: Configure
      shell: 'bash'
      run: |
        set -x
        mkdir out
        cmake -Bout -H. ${{ matrix.arch }} \
          -DBUILD_TESTING=OFF \
          -DBUILD_SHARED_LIBS=${{ matrix.build_shared_libs }} \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_INSTALL_PREFIX=`pwd`/prefix \
          -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake \
          -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} \
        #
    - name: Build
      shell: 'bash'
      run: |
        set -x
        cmake --build out --config Release
    - name: Install
      shell: 'bash'
      run: |
        set -x
        cmake --build out --config Release --target install
        cp LICENSE prefix/bin/LICENSE.brotli
    - name: Upload artifacts
      uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
      with:
        name: brotli-${{matrix.triplet}}
        path: |
          prefix/bin/*

    - name: Package release zip
      shell: 'powershell'
      run: |
        Compress-Archive -Path prefix\bin\* `
          -DestinationPath brotli-${{matrix.triplet}}.zip

    - name: Upload binaries to release
      if: github.event_name == 'release'
      uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v0.1.15
      with:
        files: brotli-${{matrix.triplet}}.zip

  testdata_upload:
    name: Upload testdata
    runs-on: 'ubuntu-latest'
    defaults:
      run:
        shell: bash
    steps:

    - name: Checkout the source
      uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
      with:
        submodules: false
        fetch-depth: 1

    - name: Compress testdata
      run: |
        tar cvfJ testdata.txz tests/testdata

    - name: Upload archive to release
      if: github.event_name == 'release'
      uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v0.1.15
      with:
        files: testdata.txz

  archive_build:
    needs: testdata_upload
    name: Build and test from archive
    runs-on: 'ubuntu-latest'
    defaults:
      run:
        shell: bash
    steps:

    - name: Checkout the source
      uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
      with:
        submodules: false
        fetch-depth: 1

    - name: Archive
      run: |
        git archive HEAD -o archive.tgz

    - name: Pick tag
      run: |
        echo "BROTLI_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV

    - name: Extract
      run: |
        mkdir archive
        cd archive
        tar xvzf ../archive.tgz

    - name: Download testdata
      run: |
        cd archive
        scripts/download_testdata.sh

    - name: Configure and Build
      run: |
        cd archive
        cmake -B out .
        cmake --build out

    - name: Test
      run: |
        cd archive
        cd out
        ctest
