#
# Copyright 2023 The Dapr Authors
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#     http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

name: Validate go quickstart

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
    tags:
      - v*
  pull_request:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
jobs:
  deploy:
    name: Validate Go quickstarts on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    timeout-minutes: 130
    env:
      DAPR_DEFAULT_IMAGE_REGISTRY: GHCR
      DAPR_INSTALL_URL: https://raw.githubusercontent.com/dapr/cli/master/install
      GOVER: 1.21
      KUBERNETES_VERSION: v1.21.1
      KIND_VERSION: v0.11.0
      KIND_IMAGE_SHA: sha256:69860bda5563ac81e3c0057d654b5253219618a22ec3a346306239bba8cfa1a6
      PODMAN_VERSION: 4.4.4
    strategy:
      matrix:
        os: [ubuntu-latest]
      fail-fast: false
    steps:
      - name: Check out code
        uses: actions/checkout@v4
      - name: Load environment variables
        uses: artursouza/export-env-action@v2
        with:
          envFile: "./.github/env/global.env"
          expand: "true"
      - name: Install podman - MacOS
        timeout-minutes: 15
        if: matrix.os == 'macos-latest'
        run: |
          # Install podman
          curl -sL -o podman.pkg https://github.com/containers/podman/releases/download/v${{ env.PODMAN_VERSION }}/podman-installer-macos-amd64.pkg
          sudo installer -pkg podman.pkg -target /
          export PATH=/opt/podman/bin:$PATH
          echo "/opt/podman/bin" >> $GITHUB_PATH
          # Start podman machine
          sudo podman-mac-helper install
          podman machine init
          podman machine start --log-level debug
          echo "CONTAINER_RUNTIME=podman" >> $GITHUB_ENV
      - name: Install podman-compose
        if: matrix.os == 'macos-latest'
        run: |
          sudo pip3 install podman-compose
      - name: Create symbolic link between Podman and Docker
        if: matrix.os == 'macos-latest'
        run: |
          sudo ln -s $(which podman) /usr/local/bin/docker
          sudo ln -s $(which podman-compose) /usr/local/bin/docker-compose
      - name: Set up Go ${{ env.GOVER }}
        uses: actions/setup-go@v5
        with:
          go-version: ${{ env.GOVER }}
      - name: Set up Dapr CLI - Mac/Linux
        if: matrix.os != 'windows-latest'
        run: wget -q ${{ env.DAPR_INSTALL_URL }}/install.sh -O - | /bin/bash -s ${{ env.DAPR_CLI_VERSION }}
      - name: Set up Dapr CLI - Windows
        if: matrix.os == 'windows-latest'
        run: powershell -Command "\$$script=iwr -useb ${{ env.DAPR_INSTALL_URL }}/install.ps1; \$$block=[ScriptBlock]::Create(\$$script); invoke-command -ScriptBlock \$$block -ArgumentList ${{ env.DAPR_CLI_VERSION }}"
      - name: Install Dapr
        run: |
          export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}
          dapr init --runtime-version=${{ env.DAPR_RUNTIME_VERSION }}
          dapr --version
      - name: Install utilities dependencies
        run: |
          echo "PATH=$PATH:$HOME/.local/bin" >> $GITHUB_ENV
          pip3 install setuptools wheel
          pip3 install mechanical-markdown
      - name: Validate building blocks with GO
        run: |
          variants=("http" "sdk")
          building_blocks=$(find . -maxdepth 1 -mindepth 1 -type d)
          for building_block in $building_blocks; do
            for variant in "${variants[@]}"
            do
              if [ ! -d "$building_block/go/$variant" ];
              then
                echo "$building_block/go/$variant does not exist."
              else
                pushd $building_block/go/$variant
                echo "Validating $building_block/go/$variant quickstart"
                make validate
                popd
              fi
            done
          done
      - name: Linkcheck README.md
        run: |
          make validate

