CodeQL

# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
  push:
    branches: [ master ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ master ]
  schedule:
    - cron: '27 15 * * 5'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: [ 'java', 'javascript' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
        # Learn more:
        # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.
        # queries: ./path/to/local/query, your-org/your-repo/queries@main

    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
    # If this step fails, then you should remove it and run the build manually (see below)
    - name: Autobuild
      uses: github/codeql-action/autobuild@v1

    # ℹ Command-line programs to run using the OS shell.
    # 📚 https://git.io/JvXDl

    # ✏ If the Autobuild fails above, remove it and uncomment the following three lines
    #    and modify them (or add more) to build your code if your project
    #    uses a compiled language

    #- run: |
    #   make bootstrap
    #   make release

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1


Java CI with Maven

name: Java CI with Maven

on:
  push:
    branches: master
  pull_request:
    branches: master
  workflow_dispatch:
    branches: [ $default-branch ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'adopt'
    - name: Build with Maven
      run: mvn -B package --file pom.xml


Build verification with Maven

name: Build verification with Maven

on:
  workflow_dispatch:
  push:
    branches: [ master, staging, dev ]
  pull_request:
    branches: [ master, staging, dev ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 8
      uses: actions/setup-java@v2
      with:
        java-version: '8'
        distribution: 'adopt'
    - name: Restore Maven cache
      uses: skjolber/maven-cache-github-action@v1
      with:
        step: restore
    - name: Build with Maven
      run: mvn install --file pom.xml


Update DockerHub Description

name: Update DockerHub Description
on:
  workflow_dispatch:
  push:
    branches:
      - master
    paths:
      - README.md
      - .github/workflows/sync_dockerhub_description.yml
jobs:
  dockerHubDescription:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Docker Hub Description
      uses: peter-evans/dockerhub-description@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_PASSWORD }}
        repository: uniwuezpd/larex
        short-description: ${{ github.event.repository.description }}


Build znai

name: Build znai

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up JDK 17
        uses: actions/setup-java@v1
        with:
          java-version: 17

      - name: Set up grahpviz
        run: sudo apt-get install graphviz

      - name: Build with xvfb enabled
        uses: GabrielBB/xvfb-action@v1.0
        with:
          run: mvn -B package

      - name: upload webtau test report
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: webtau report
          path: znai-tests/src/test/groovy/webtau.report.html
          retention-days: 3
      - name: upload testing examples webtau test report
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: webtau testing examples report
          path: znai-testing-examples/examples/webtau.report.html
          retention-days: 3
      - name: upload screenshots when build fails
        uses: actions/upload-artifact@v2
        if: failure()
        with:
          name: doc screenshots
          path: znai-testing-examples/**/*.png
          retention-days: 3


Build and deploy documentation

name: Build and deploy documentation

on:
  issues:
    types: [opened]

jobs:
  build:
    runs-on: ubuntu-latest
    if: startsWith(github.event.issue.title, 'deploy documentation')

    steps:
      - uses: actions/checkout@v2
      - run: git fetch --prune --unshallow

      - name: Set up JDK 17
        uses: actions/setup-java@v1
        with:
          java-version: 17

      - name: Set up grahpviz
        run: sudo apt-get install graphviz

      - name: Force non snapshot version
        run: mvn versions:set -DnewVersion=$(git describe --abbrev=0)

      - name: Build with xvfb enabled
        uses: GabrielBB/xvfb-action@v1.0
        with:
          run: mvn -B package

      - name: deploy documentation
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./znai-docs/target/znai

      - name: close triggering issue
        uses: actions/github-script@0.9.0
        env:
          GITHUB_RUN_ID: ${{github.run_id}}
        with:
          github-token: ${{secrets.GITHUB_TOKEN}}
          script: |
            await github.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: 'documentation is deployed'
            })
            await github.issues.update({
             issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              state: 'closed'
            })


CodeQL

name: "CodeQL"

on:
  push:
    branches: [ master, codeql ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ master ]
    paths-ignore:
      - 'docs/**'
      - '**/*.md'
      - '**/tests/**'
      - '**/test/**'
      - '**/integ_test/**'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'java', 'python' ]

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v2
      with:
        languages: ${{ matrix.language }}
        config-file: ./.github/codeql-config.yml

    - if: matrix.language == 'python'
      name: Autobuild
      uses: github/codeql-action/autobuild@v3

    - if: matrix.language == 'java'
      name: Set up JDK 1.8
      uses: actions/setup-java@v4
      with:
        distribution: corretto
        java-version: 8
        cache: 'maven'
    - if: matrix.language == 'java'
      name: Build with Maven
      working-directory: deploy-service
      run: |
          mvn clean package --file pom.xml -P-pinterest-dependenies,exclude-pinterest-only-classes -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip -DskipTests -Dmaven.test.skip.exec -Dlicense.skip=true -Drat.skip=true -Dspotless.check.skip=true

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v2


Pull Request Labeler

name: "Pull Request Labeler"

on:
  - pull_request_target

jobs:
  labeler:
    permissions:
      contents: read
      pull-requests: write
    runs-on: ubuntu-latest
    steps:
    - uses: actions/labeler@v5
      with:
        repo-token: "${{ secrets.GITHUB_TOKEN }}"
        sync-labels: true


Java CI

name: Java CI

on:
  push:
    branches:
    - master
    paths:
    - 'deploy-service/**'
    - '.github/workflows/maven.yml'
  pull_request:
    branches:
    - master

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 1.8
      uses: actions/setup-java@v4
      with:
        distribution: corretto
        java-version: 8
        cache: 'maven'
    - name: Build with Maven
      working-directory: deploy-service
      run: |
        mvn clean package --file pom.xml -P-pinterest-dependenies,exclude-pinterest-only-classes


pre-commit

name: pre-commit

on:
  pull_request:

jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
      with:
        fetch-depth: 0
    - uses: actions/setup-python@v3
    - uses: pre-commit/action@v3.0.1
      with:
        extra_args: --color=always --from-ref ${{ github.event.pull_request.base.sha }} --to-ref ${{ github.event.pull_request.head.sha }}


Deploy Agent CI

name: Deploy Agent CI

on:
  push:
    paths:
      'deploy-agent/**'
    branches:
      - master
  pull_request:
    paths:
      'deploy-agent/**'
    branches:
      - master

defaults:
  run:
    shell: bash
    working-directory: ./deploy-agent

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.7, 3.8]
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install tox tox-gh-actions
      - name: Tests
        run: |
          tox -v


CI

name: CI
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
jobs:
  test:
    name: '${{ matrix.platform }} with Java ${{ matrix.java-distribution }} version ${{ matrix.java-version }}'
    strategy:
      matrix:
        platform:
          - ubuntu-latest
        java-distribution:
          - adopt-hotspot
          - temurin
          - zulu
        java-version:
          - 8
          - 11
        include:
          - platform: windows-latest
            java-distribution: adopt-hotspot
            java-version: 11
          - platform: macos-latest
            java-distribution: adopt-hotspot
            java-version: 11
    runs-on: ${{ matrix.platform }}
    timeout-minutes: 45
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Gradle Wrapper Validation
        uses: gradle/actions/wrapper-validation@v3
      - name: Setup Java
        uses: actions/setup-java@v4
        with:
          distribution: ${{ matrix.java-distribution }}
          java-version: ${{ matrix.java-version }}
      - name: Build and Test
        run: ./gradlew -S --no-daemon --no-parallel build jacocoAggregateReport coveralls
      - name: Lint JavaScript
        run: ./gradlew -S --no-daemon --no-parallel :npm_run_lint-js


Build and test

name: Build and test

on:
  push:
    branches:
      - master
    tags:
      - "v*"
  pull_request:

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    services:
      salt-master:
        image: mbologna/saltstack-master
        options: --name saltmaster
        ports:
          - 8000:9080
      salt-minion1:
        image: mbologna/saltstack-minion
        options: --name saltminion1 --link saltmaster:salt
      salt-minion2:
        image: mbologna/saltstack-minion
        options: --name saltminion2 --link saltmaster:salt

    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK 11
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: '11'
      - name: Build and test with Maven
        run: mvn checkstyle:check javadoc:javadoc test package
      - name: Get branch name or tag
        if: success()
        uses: tj-actions/branch-names@v8
        id: branch-name
      - name: Publish javadoc for the default branch
        if: success() && steps.branch-name.outputs.is_default == 'true'
        uses: peaceiris/actions-gh-pages@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./target/apidocs
          destination_dir: docs/${{ steps.branch-name.outputs.current_branch }}
          user_name: 'github-actions[bot]'
          user_email: 'github-actions[bot]@users.noreply.github.com'
      - name: Publish javadoc for a tagged release
        if: success() && steps.branch-name.outputs.is_tag == 'true'
        uses: peaceiris/actions-gh-pages@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./target/apidocs
          destination_dir: docs/${{ steps.branch-name.outputs.tag }}
          user_name: 'github-actions[bot]'
          user_email: 'github-actions[bot]@users.noreply.github.com'
      - name: Create tagged release
        if: success() && steps.branch-name.outputs.is_tag == 'true'
        uses: marvinpinto/action-automatic-releases@latest
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          prerelease: false
          files: |
            target/salt-netapi-client*.jar


Build Quickstarts

#
# Copyright 2021 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: Build Quickstarts

on:
  push:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
    tags:
      - v*
    paths-ignore:
      - '**.md'
  workflow_dispatch:
jobs:
  build:
    name: Build ${{ matrix.target_os }}_${{ matrix.target_arch }} binaries
    runs-on: ${{ matrix.os }}
    env:
      TARGET_OS: ${{ matrix.target_os }}
      TARGET_ARCH: ${{ matrix.target_arch }}
      DOCKER_CLI_EXPERIMENTAL: enabled
      SAMPLE_REGISTRY: ${{ vars.SAMPLE_REGISTRY }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        target_arch: [arm, arm64, amd64]
        include:
          - os: ubuntu-latest
            target_os: linux
    steps:
      - name: Check Docker version
        run: docker --version
      - name: Set REPO_OWNER
        run: |
          REPO_OWNER=${{ github.repository_owner }}
          # Lowercase the value
          echo "REPO_OWNER=${REPO_OWNER,,}" >>${GITHUB_ENV}
        shell: bash
      - name: Check out code
        uses: actions/checkout@v2
      - name: Parse release version and set REL_VERSION
        run: python ./.github/scripts/get_release_version.py
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
        if: ${{ matrix.target_arch == 'arm' || matrix.target_arch == 'arm64' }}
        with:
          image: tonistiigi/binfmt:latest
          platforms: arm,arm64
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
        with:
          version: v0.9.1 # Don't use latest since it broke our workflow once
      - name: Build docker image
        run: |
          SAMPLE_LIST=(tutorials/hello-kubernetes tutorials/distributed-calculator tutorials/pub-sub tutorials/bindings tutorials/observability tutorials/secretstore)
          for sample in "${SAMPLE_LIST[@]}"; do
            echo "Building image for ${sample}..."
            pushd ${sample}
            make build
            popd
          done
      - name: docker login
        run: |
          docker login -u ${{ secrets.DOCKER_REGISTRY_ID }} -p ${{ secrets.DOCKER_REGISTRY_PASS }}
      - name: publish image to dockerhub
        run: |
          SAMPLE_LIST=(tutorials/hello-kubernetes tutorials/distributed-calculator tutorials/pub-sub tutorials/bindings tutorials/observability tutorials/secretstore)
          for sample in "${SAMPLE_LIST[@]}"; do
            echo "Push image for ${sample}..."
            pushd ${sample}
            make push
            popd
          done
      - name: GitHub container registry login
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build docker image
        env:
          SAMPLE_REGISTRY: ghcr.io/${{ env.REPO_OWNER }}/samples
        run: |
          SAMPLE_LIST=(tutorials/hello-kubernetes tutorials/distributed-calculator tutorials/pub-sub tutorials/bindings tutorials/observability tutorials/secretstore)
          for sample in "${SAMPLE_LIST[@]}"; do
            echo "Building image for ${sample}..."
            pushd ${sample}
            make build
            popd
          done
      - name: publish image to ghcr
        if: github.event_name != 'pull_request'
        env:
          SAMPLE_REGISTRY: ghcr.io/${{ env.REPO_OWNER }}/samples
        run: |
          SAMPLE_LIST=(tutorials/hello-kubernetes tutorials/distributed-calculator tutorials/pub-sub tutorials/bindings tutorials/observability tutorials/secretstore)
          for sample in "${SAMPLE_LIST[@]}"; do
            echo "Push image for ${sample}..."
            pushd ${sample}
            make push
            popd
          done
  publish:
    name: Publish docker manifest
    needs: build
    runs-on: ubuntu-latest
    env:
      DOCKER_CLI_EXPERIMENTAL: enabled
      SAMPLE_REGISTRY: ${{ vars.SAMPLE_REGISTRY }}
    steps:
      - name: Set REPO_OWNER
        run: |
          REPO_OWNER=${{ github.repository_owner }}
          # Lowercase the value
          echo "REPO_OWNER=${REPO_OWNER,,}" >>${GITHUB_ENV}
      - name: Check out code
        uses: actions/checkout@v2
      - name: Parse release version and set REL_VERSION
        run: python ./.github/scripts/get_release_version.py
      - name: docker login
        run: |
          docker login -u ${{ secrets.DOCKER_REGISTRY_ID }} -p ${{ secrets.DOCKER_REGISTRY_PASS }}
      - name: create docker manifest
        run: |
          SAMPLE_LIST=(tutorials/hello-kubernetes tutorials/distributed-calculator tutorials/pub-sub tutorials/bindings tutorials/observability tutorials/secretstore)
          for sample in "${SAMPLE_LIST[@]}"; do
            echo "Building image for ${sample}..."
            pushd ${sample}
            make manifest-create
            popd
          done
      - name: publish manifest to dockerhub
        run: |
          SAMPLE_LIST=(tutorials/hello-kubernetes tutorials/distributed-calculator tutorials/pub-sub tutorials/bindings tutorials/observability tutorials/secretstore)
          for sample in "${SAMPLE_LIST[@]}"; do
            echo "Push image for ${sample}..."
            pushd ${sample}
            make manifest-push
            popd
          done
      - name: GitHub container registry login
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: create ghcr manifest
        if: github.event_name != 'pull_request'
        env:
          SAMPLE_REGISTRY: ghcr.io/${{ env.REPO_OWNER }}/samples
        run: |
          SAMPLE_LIST=(tutorials/hello-kubernetes tutorials/distributed-calculator tutorials/pub-sub tutorials/bindings tutorials/observability tutorials/secretstore)
          for sample in "${SAMPLE_LIST[@]}"; do
            echo "Building image for ${sample}..."
            pushd ${sample}
            make manifest-create
            popd
          done
      - name: publish manifest to ghcr
        if: github.event_name != 'pull_request'
        env:
          SAMPLE_REGISTRY: ghcr.io/${{ env.REPO_OWNER }}/samples
        run: |
          SAMPLE_LIST=(tutorials/hello-kubernetes tutorials/distributed-calculator tutorials/pub-sub tutorials/bindings tutorials/observability tutorials/secretstore)
          for sample in "${SAMPLE_LIST[@]}"; do
            echo "Push image for ${sample}..."
            pushd ${sample}
            make manifest-push
            popd
          done


Validate Tutorials

#
# Copyright 2021 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 Tutorials

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
    tags:
      - v*
  pull_request:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
jobs:
  deploy:
    name: Validate tutorials on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    timeout-minutes: 40
    env:
      GOVER: 1.17
      KUBERNETES_VERSION: v1.21.1
      KIND_VERSION: v0.12.0
      KIND_IMAGE_SHA: sha256:69860bda5563ac81e3c0057d654b5253219618a22ec3a346306239bba8cfa1a6
    strategy:
      matrix:
        os: [ubuntu-latest]
      fail-fast: false
    steps:
      - name: Check out code
        uses: actions/checkout@v2
      - name: Load environment variables
        uses: artursouza/export-env-action@v2
        with:
          envFile: './.github/env/global.env'
          expand: 'true'
      - name: Pinning Python to ${{ env.MACOS_PYTHON_VERSION }} on MacOS
        if: matrix.os == 'macos-latest'
        run: brew install python@${{ env.MACOS_PYTHON_VERSION }} && brew unlink python@${{ env.MACOS_PYTHON_VERSION }} && brew link --overwrite python@${{ env.MACOS_PYTHON_VERSION }}
      - name: Verify Python version
        run: python3 --version
      - name: Upgrade pip and setuptools
        if: matrix.os == 'macos-latest'
        run: pip3 install --upgrade pip && python3 -m pip install --upgrade setuptools
      - name: Show .Net version
        run: dotnet --version
      - name: Install Docker - MacOS
        if: matrix.os == 'macos-latest'
        uses: docker-practice/actions-setup-docker@v1
        with:
          docker_buildx: false
          docker_version: 20.10
      - name: Install Helm - MacOS
        if: matrix.os == 'macos-latest'
        run: brew install helm
      - name: Configure KinD
        if: matrix.os == 'ubuntu-latest'
        # Generate a KinD configuration file that uses:
        # A couple of worker nodes: this is needed to run both
        #     ZooKeeper + Kakfa
        working-directory: ./
        run: |
          cat > kind.yaml <<EOF
          apiVersion: kind.x-k8s.io/v1alpha4
          kind: Cluster
          nodes:
          - role: control-plane
            image: kindest/node:${{ env.KUBERNETES_VERSION }}@${{ env.KIND_IMAGE_SHA }}
          - role: worker
            image: kindest/node:${{ env.KUBERNETES_VERSION }}@${{ env.KIND_IMAGE_SHA }}
          - role: worker
            image: kindest/node:${{ env.KUBERNETES_VERSION }}@${{ env.KIND_IMAGE_SHA }}
          - role: worker
            image: kindest/node:${{ env.KUBERNETES_VERSION }}@${{ env.KIND_IMAGE_SHA }}
          - role: worker
            image: kindest/node:${{ env.KUBERNETES_VERSION }}@${{ env.KIND_IMAGE_SHA }}
          EOF

          # Log the generated kind.yaml for easy reference.
          cat kind.yaml

      - name: Create KinD Cluster - Linux
        if: matrix.os == 'ubuntu-latest'
        uses: helm/kind-action@v1.2.0
        with:
          config: kind.yaml
          cluster_name: kind
          version: ${{ env.KIND_VERSION }}
      - name: Install minikube - MacOS
        if: matrix.os == 'macos-latest'
        run: |
          brew install kubernetes-cli || brew link --overwrite kubernetes-cli
          brew install minikube
          minikube start --driver=virtualbox --memory 8192 --host-only-cidr "192.168.59.1/24"
      - name: Get KinD info
        if: matrix.os == 'ubuntu-latest'
        run: |
          kubectl cluster-info --context kind-kind
          NODE_IP=$(kubectl get nodes \
                    -lkubernetes.io/hostname!=kind-control-plane \
                    -ojsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
          echo "SERVICE_IP=$NODE_IP" >> $GITHUB_ENV
      - name: Set up Go ${{ env.GOVER }}
        uses: actions/setup-go@v2
        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 Dapr - Kubernetes
        run: |
          helm repo add bitnami https://charts.bitnami.com/bitnami
          helm repo update
          helm install redis bitnami/redis --version 17.14.5
          dapr init -k --dev --runtime-version=${{ env.DAPR_RUNTIME_VERSION }} --wait || kubectl get pods --all-namespaces
          kubectl get nodes -o wide
          for pod in `dapr status -k | awk '/dapr/ {print $1}'`; do kubectl describe pod -l app=$pod -n dapr-system ; kubectl logs -l app=$pod -n dapr-system; done
      - name: Install utilities dependencies
        run: |
          echo "PATH=$PATH:$HOME/.local/bin" >> $GITHUB_ENV
          pip3 install setuptools wheel
          pip3 install mechanical-markdown
      - name: Validate hello-world
        run: |
          pushd tutorials/hello-world
          make validate
          popd
      - name: Validate hello-kubernetes multi app run
        if: matrix.os == 'ubuntu-latest'
        run: |
          pushd tutorials/hello-kubernetes
          make validate_multi_app_run
          popd
      - name: Validate hello-kubernetes normal run
        if: matrix.os == 'ubuntu-latest'
        run: |
          pushd tutorials/hello-kubernetes
          make validate_normal_run
          popd
      - name: Validate distributed-calculator
        if: matrix.os == 'ubuntu-latest'
        run: |
          pushd tutorials/distributed-calculator
          make validate
          popd
      - name: Validate pub-sub
        if: matrix.os == 'ubuntu-latest'
        run: |
          pushd tutorials/pub-sub
          make validate
          popd
      - name: Validate bindings
        if: matrix.os == 'ubuntu-latest'
        run: |
          pushd tutorials/bindings
          make validate
          popd
      - name: Validate secretstore
        if: matrix.os == 'ubuntu-latest'
        run: |
          pushd tutorials/secretstore
          make validate
          popd
      - name: Validate observability
        if: matrix.os == 'ubuntu-latest'
        run: |
          pushd tutorials/observability
          make validate
          popd
      - name: Linkcheck README.md
        run: |
          make validate


Validate go quickstart

#
# 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


Validate python quickstart

#
# 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 python quickstart

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
    tags:
      - v*
  pull_request:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
jobs:
  validate:
    name: Validate Python quickstart 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.19
      KUBERNETES_VERSION: v1.25.3
      KIND_VERSION: v0.17.0
      KIND_IMAGE_SHA: sha256:f52781bc0d7a19fb6c405c2af83abfeb311f130707a0e219175677e366cc45d1
      PODMAN_VERSION: 4.4.4
    strategy:
      matrix:
        os: [ubuntu-latest]
      fail-fast: false
    steps:
      - name: Check out code
        uses: actions/checkout@v2
      - name: Load environment variables
        uses: artursouza/export-env-action@v2
        with:
          envFile: './.github/env/global.env'
          expand: 'true'
      - name: Pinning Python to ${{ env.MACOS_PYTHON_VERSION }} on MacOS
        if: matrix.os == 'macos-latest'
        run: brew install python@${{ env.MACOS_PYTHON_VERSION }} && brew unlink python@${{ env.MACOS_PYTHON_VERSION }} && brew link --overwrite python@${{ env.MACOS_PYTHON_VERSION }}
      - name: Verify Python version
        run: python3 --version
      - name: Upgrade pip and setuptools
        if: matrix.os == 'macos-latest'
        run: pip3 install --upgrade pip && python3 -m pip install --upgrade setuptools
      - 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 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
          pip3 install fastapi uvicorn
      - name: Validate building blocks with Python
        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/python/$variant" ];
              then
                echo "$building_block/python/$variant does not exist."
              else
                pushd $building_block/python/$variant
                echo "Validating $building_block/python/$variant quickstart"
                make validate
                popd
              fi
            done
          done
      - name: Linkcheck README.md
        run: |
          make validate


Validate java quickstart

#
# 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 java quickstart

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
    tags:
      - v*
  pull_request:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
jobs:
  validate:
    name: Validate Java quickstart 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.19
      KUBERNETES_VERSION: v1.25.3
      KIND_VERSION: v0.17.0
      KIND_IMAGE_SHA: sha256:f52781bc0d7a19fb6c405c2af83abfeb311f130707a0e219175677e366cc45d1
      PODMAN_VERSION: 4.4.4
    strategy:
      matrix:
        os: [ubuntu-latest]
      fail-fast: false
    steps:
      - name: Check out code
        uses: actions/checkout@v2
      - 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 OpenJDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'adopt'
          java-version: 17
      - 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 Java
        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/java/$variant" ];
              then
                echo "$building_block/java/$variant does not exist."
              else
                pushd $building_block/java/$variant
                echo "Validating $building_block/java/$variant quickstart"
                make validate
                popd
              fi
            done
          done
      - name: Linkcheck README.md
        run: |
          make validate


Validate csharp quickstart

#
# 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 csharp quickstart

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
    tags:
      - v*
  pull_request:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
jobs:
  validate:
    name: Validate C# quickstart 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.18
      KUBERNETES_VERSION: v1.25.3
      KIND_VERSION: v0.17.0
      KIND_IMAGE_SHA: sha256:f52781bc0d7a19fb6c405c2af83abfeb311f130707a0e219175677e366cc45d1
      PODMAN_VERSION: 4.4.4
    strategy:
      matrix:
        os: [ubuntu-latest]
      fail-fast: false
    steps:
      - name: Check out code
        uses: actions/checkout@v2
      - 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: Install .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: |
            6.0.x
            8.0.x
      - 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 C#
        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/csharp/$variant" ];
              then
                echo "$building_block/csharp/$variant does not exist."
              else
                pushd $building_block/csharp/$variant
                echo "Validating $building_block/csharp/$variant quickstart"
                make validate
                popd
              fi
            done
          done
      - name: Linkcheck README.md
        run: |
          make validate


Validate javascript quickstart

#
# 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 javascript quickstart

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
    tags:
      - v*
  pull_request:
    branches:
      - master
      - feature/new_quickstarts
      - release-*
jobs:
  validate:
    name: Validate Javascript quickstart 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.19
      KUBERNETES_VERSION: v1.25.3
      KIND_VERSION: v0.17.0
      KIND_IMAGE_SHA: sha256:f52781bc0d7a19fb6c405c2af83abfeb311f130707a0e219175677e366cc45d1
      PODMAN_VERSION: 4.4.4
    strategy:
      matrix:
        os: [ubuntu-latest]
      fail-fast: false
    steps:
      - name: Check out code
        uses: actions/checkout@v2
      - 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 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 Javascript
        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/javascript/$variant" ];
              then
                echo "$building_block/javascript/$variant does not exist."
              else
                pushd $building_block/javascript/$variant
                echo "Validating $building_block/javascript/$variant quickstart"
                make validate
                popd
              fi
            done
          done
      - name: Linkcheck README.md
        run: |
          make validate


dapr-bot

# ------------------------------------------------------------
# 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: dapr-bot

on:
  issue_comment: {types: created}

jobs:
  daprbot:
    name: bot-processor
    runs-on: ubuntu-latest
    steps:
      - name: Comment analyzer
        uses: actions/github-script@v6
        with:
          github-token: ${{secrets.DAPR_BOT_TOKEN}}
          script: |
            const payload = context.payload;
            const issue = context.issue;
            const isFromPulls = !!payload.issue.pull_request;
            const commentBody = payload.comment.body;
            if (!isFromPulls && commentBody && commentBody.indexOf("/assign") == 0) {
              if (!issue.assignees || issue.assignees.length === 0) {
                await github.rest.issues.addAssignees({
                  owner: issue.owner,
                  repo: issue.repo,
                  issue_number: issue.number,
                  assignees: [context.actor],
                })
              }
              return;
            }


Testing JDI Dark - debug on server

name: Testing JDI Dark - debug on server
env:
  HTTP_TESTS: "com.epam.jdi:jdi-dark-tests"
  BDD_TESTS: "com.epam.jdi:jdi-dark-bdd-tests"
  ALLURE_VERSION: "2.7.0"

on:
  push:
    branches: [ debugging_branch_name ]
# !!!! Please make sure that you don't change this file in master after debug is completed

jobs:
  build:
    name: Run tests on JDK
    runs-on: ubuntu-20.04
    strategy:
      fail-fast: false
      matrix:
        java: [8, 9, 10, 11, 12, 13] # all [8, 9, 10, 11, 12, 13, 14], only one is [8]

    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 8
        uses: actions/setup-java@v1
        with:
          java-version: ${{ matrix.java }}
          java-package: jdk
      - name: Prepare environment
        run: |
          sudo apt-get -y install jq
          java -Xmx32m -version
          ls -lah
          env

# run cann't start from comment
#  curl -o allure-${ALLURE_VERSION}.tgz -Ls https://dl.bintray.com/qameta/generic/io/qameta/allure/allure/${ALLURE_VERSION}/allure-${ALLURE_VERSION}.tgz
      - name: Install Allure
        run: |
          sudo tar -zxvf allure-${ALLURE_VERSION}.tgz -C /opt/
          sudo ln -s /opt/allure-${ALLURE_VERSION}/bin/allure /usr/bin/allure
          allure --version

      - name: Welcome to JDI
        run: |
            echo ------------------- WELCOME TO JDI DARK ----------------------
            mvn --version

      - name: Compile jdi code
        id: jdi-compile
        run: mvn clean install -DskipTests

      - name: Run tests - BDD
        if: steps.jdi-compile.outcome == 'success'
        timeout-minutes: 90 # prevent blocking
        continue-on-error: true
        run: |
          mvn verify -pl $BDD_TESTS --fail-at-end

      - name: Run tests - HTTP
        if: steps.jdi-compile.outcome == 'success'
        timeout-minutes: 90 # prevent blocking
        continue-on-error: true
        run: |
          mvn verify -pl $HTTP_TESTS --fail-at-end

      - name: Collect reports
        run: |
          echo --------------- Collecting Allure Reports.... ------------------
          sudo chmod +x reporting.sh
          source reporting.sh
          generateAllureReports
          printAllureSummary ${{ matrix.java }}
          zip -r allure-report.zip ./allure-report/

      - name: 'Upload allure report'
        if: steps.jdi-compile.outcome == 'success'
        uses: actions/upload-artifact@v2
        with:
          name: allure-report-dark-jdk${{ matrix.java }}
          path: ./allure-report.zip
          retention-days: 2

      - name: Test Coverage
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}


Testing JDI Dark

name: Testing JDI Dark
env:
  HTTP_TESTS: "com.epam.jdi:jdi-dark-tests"
  BDD_TESTS: "com.epam.jdi:jdi-dark-bdd-tests"
  ALLURE_VERSION: "2.7.0"
  SUREFIRE_ARGS: "--add-opens java.base/java.lang=ALL-UNNAMED"
  SUREFIRE_ARGS_BDD: "--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED  --add-opens=java.desktop/java.awt.font=ALL-UNNAMED"

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
  page_build:
  release:
    types: # This configuration does not affect the page_build event above
      - created

jobs:
  build:
    name: Run tests for JDK
    runs-on: ubuntu-20.04
    strategy:
      max-parallel: 2 # can be removed to speed-up, but it's not always stable
      fail-fast: false
      matrix:
        java: [8, 11, 15, 17, 18] # [8, 11, 13, 14, 15, 17, 18, 21]

    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v3
        with:
          java-version: ${{ matrix.java }}
          java-package: jdk
          distribution: 'zulu'
          cache: 'maven'

      - name: Prepare environment
        run: |
          sudo apt-get -y install jq
          java -Xmx32m -version
          env

# run cann't start from comment
#  curl -o allure-${ALLURE_VERSION}.tgz -Ls https://dl.bintray.com/qameta/generic/io/qameta/allure/allure/${ALLURE_VERSION}/allure-${ALLURE_VERSION}.tgz
      - name: Install Allure
        run: |
          sudo tar -zxvf allure-${ALLURE_VERSION}.tgz -C /opt/
          sudo ln -s /opt/allure-${ALLURE_VERSION}/bin/allure /usr/bin/allure
          allure --version

      - name: Welcome to JDI
        run: |
            echo ------------------- WELCOME TO JDI DARK ----------------------
            mvn --version

      - name: Compile jdi code
        id: jdi-compile
        run: mvn clean install -DskipTests -Dsource.skip -Dmaven.source.skip -Dmaven.javadoc.skip=true -ntp

      - name: Run tests - BDD
        id: testsBdd
        if: steps.jdi-compile.outcome == 'success'
        timeout-minutes: 30 # prevent blocking
        continue-on-error: true
        run: mvn verify -pl $BDD_TESTS --fail-at-end

      - name: Run tests - HTTP
        id: testsHttp
        if: steps.jdi-compile.outcome == 'success'
        timeout-minutes: 30 # prevent blocking
        continue-on-error: true
        run: mvn verify -pl $HTTP_TESTS --fail-at-end

      - name: Collect reports
        if: steps.jdi-compile.outcome == 'success'
        run: |
          echo --------------- Collecting Allure Reports.... ------------------
          sudo chmod +x reporting.sh
          source reporting.sh
          generateAllureReports
          printAllureSummary ${{ matrix.java }}
          zip -r allure-report.zip ./allure-report/

      - name: 'Upload allure report'
        if: steps.jdi-compile.outcome == 'success'
        uses: actions/upload-artifact@v3
        with:
          name: allure-report-dark-jdk${{ matrix.java }}
          path: ./allure-report.zip
          retention-days: 2

#      - name: Deploy to Neflify
#        uses: South-Paw/action-netlify-deploy@v1.0.4
#        with:
#          github-token: ${{ secrets.GIT_COMMENT_USER }}
#          netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
#          netlify-site-id: ${{ secrets.NETLIFY_SITE_ID }}
#          build-dir: './allure-report'
#          comment-on-pull-request: true

      - name: Test Coverage
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

      - name: Check for any failure
        if: ${{ (steps.testsBdd.outcome != 'success') || (steps.testsHttp.outcome != 'success')}}
        run: |
          echo BDD tests result ${{ steps.testsBdd.outcome }}
          echo HTTP tests result ${{ steps.testsHttp.outcome }}
          exit 1


Release JDI Dark

name: Release JDI Dark

on:
  release:
    types:
      - created

jobs:
  check_examples:
    name: Run examples run
    runs-on: ubuntu-20.04
    strategy:
      fail-fast: false

    steps:
      - name: Webhook send to template bdd testng
        uses: joelwmale/webhook-action@master
        with:
          url: 'https://api.github.com/repos/jdi-templates/jdi-dark-bdd-testng-template/dispatches'
          headers: '{"Accept": "application/vnd.github+json", "Authorization": "${{ secrets.WEBHOOK_AUTH }}"}'
          body: '{"event_type": "webhook"}'

      - name: Webhook send to template bdd junit
        uses: joelwmale/webhook-action@master
        with:
          url: 'https://api.github.com/repos/jdi-templates/jdi-dark-bdd-junit-template/dispatches'
          headers: '{"Accept": "application/vnd.github+json", "Authorization": "${{ secrets.WEBHOOK_AUTH }}"}'
          body: '{"event_type": "webhook"}'

      - name: Webhook send to template junit
        uses: joelwmale/webhook-action@master
        with:
          url: 'https://api.github.com/repos/jdi-templates/jdi-dark-junit-template/dispatches'
          headers: '{"Accept": "application/vnd.github+json", "Authorization": "${{ secrets.WEBHOOK_AUTH }}"}'
          body: '{"event_type": "webhook"}'

      - name: Webhook send to template testng
        uses: joelwmale/webhook-action@master
        with:
          url: 'https://api.github.com/repos/jdi-templates/jdi-dark-testng-template/dispatches'
          headers: '{"Accept": "application/vnd.github+json", "Authorization": "${{ secrets.WEBHOOK_AUTH }}"}'
          body: '{"event_type": "webhook"}'


maven ci

# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: maven ci

on:
  push:
    branches:
      - master
      - develop
  pull_request:
    branches:
      - master
      - develop

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-java@v3
      with:
        distribution: 'temurin'
        java-version: '17'
        cache: 'maven'
    - name: Build with Maven
      run: mvn -B package --file pom.xml


CI

name: CI

on: [push, pull_request, workflow_dispatch]

env:
    MAVEN_OPTS: >-
        -Dmaven.wagon.httpconnectionManager.ttlSeconds=120
    SCREENSHOT_DIRECTORY: '/tmp/pf_it/'

jobs:
  build:
    runs-on: ubuntu-latest
    if: github.repository == 'primefaces/primefaces'
    name: Build
    strategy:
      fail-fast: false
      matrix:
        java: [11, 21]
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}
          cache: 'maven'
      - name: Build
        run: mvn clean install -T1C -Pjsdoc,minify --batch-mode --show-version
      - name: Sonar Cloud
        if: github.repository == 'primefaces/primefaces' && github.ref == 'refs/heads/master' && matrix.java == 21
        run: mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install sonar:sonar -Pquick -Dsonar.organization=primefaces -Dsonar.host.url=https://sonarcloud.io -Dsonar.token=${{secrets.SONAR_TOKEN}}  -fprimefaces/pom.xml
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

  integration-tests-23:
    runs-on: ubuntu-latest
    if: github.repository == 'primefaces/primefaces'
    name: Integration Tests (Java ${{ matrix.java }} - ${{ matrix.facesimpl }})
    strategy:
      fail-fast: false
      matrix:
        java: [11, 21, 22]
        facesimpl: [ 'mojarra-2.3', 'myfaces-2.3']
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}
          cache: 'maven'
      - name: Build
        run: mvn clean install -pl -primefaces-integration-tests-jakarta -T1C -DskipTests -Dcheckstyle.skip -Djsdoc.skip.typedoc=true -Dmaven.javadoc.skip=true --batch-mode --show-version
      - name: Integration Tests
        run: mvn -B -V clean install -fprimefaces-integration-tests/pom.xml -Pintegration-tests,parallel-execution,headless,chrome,theme-saga,csp,${{ matrix.facesimpl }}
      - name: Upload failure-screenshots
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: failed_tests_screenshots_java${{ matrix.java }}_${{ matrix.facesimpl }}
          if-no-files-found: ignore
          path: /tmp/pf_it/

  integration-tests-40:
    runs-on: ubuntu-latest
    if: github.repository == 'primefaces/primefaces'
    name: Integration Tests (Java ${{ matrix.java }} - ${{ matrix.facesimpl }})
    strategy:
      fail-fast: false
      matrix:
        java: [11, 21]
        facesimpl: [ 'mojarra-4.0', 'myfaces-4.0' ]
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}
          cache: 'maven'
      - name: Build
        run: mvn clean install -T1C -DskipTests -Dcheckstyle.skip -Djsdoc.skip.typedoc=true -Dmaven.javadoc.skip=true --batch-mode --show-version
      - name: Integration Tests
        run: mvn -B -V clean install -fprimefaces-integration-tests-jakarta/pom.xml -Pintegration-tests,parallel-execution,headless,chrome,theme-saga,csp,${{ matrix.facesimpl }}
      - name: Upload failure-screenshots
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: failed_tests_screenshots_java${{ matrix.java }}_${{ matrix.facesimpl }}_jakarta
          if-no-files-found: ignore
          path: /tmp/pf_it/


Issue Inactive Checker

name: Issue Inactive Checker

on:
  schedule:
    - cron: "0 13 * * *" # Every Monday at 1PM UTC (9AM EST)

permissions:
  contents: read

jobs:
  issue-close-require:
    permissions:
      issues: write
      pull-requests: write
    runs-on: ubuntu-latest
    steps:
      - name: Cannot Replicate
        uses: actions-cool/issues-helper@v3
        with:
          actions: "close-issues"
          labels: "Resolution: Cannot Replicate"
          inactive-day: 20
      - name: Needs Reproducer
        uses: actions-cool/issues-helper@v3
        with:
          actions: "close-issues"
          labels: "Status: Needs Reproducer"
          inactive-day: 20


Issue Labeled

name: Issue Labeled

on:
  issues:
    types: [labeled]

permissions:
  contents: read

jobs:
  issue-labeled:
    permissions:
      issues: write  # for actions-cool/issues-helper to update issues
      pull-requests: write  # for actions-cool/issues-helper to update PRs
    runs-on: ubuntu-latest
    steps:
      - name: Cannot Replicate
        if: "${{ github.event.label.name == 'Resolution: Cannot Replicate'}}"
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'create-comment'
          token: ${{ secrets.GITHUB_TOKEN }}
          issue-number: ${{ github.event.issue.number }}
          body: |
            We're unable to replicate your issue, if you are able to create a  [PrimeFaces Test Reproducer](https://github.com/primefaces/primefaces-test) or add details please edit this issue. This issue will be closed if no activities in 20 days.
      - name: Needs Reproducer
        if: "${{ github.event.label.name == 'Status: Needs Reproducer'}}"
        uses: actions-cool/issues-helper@v3
        with:
          actions: 'create-comment'
          token: ${{ secrets.GITHUB_TOKEN }}
          issue-number: ${{ github.event.issue.number }}
          body: |
            Please provide an executable example using the [PrimeFaces Test](https://github.com/primefaces/primefaces-test) project. This issue will be closed if no activities in 20 days.


IT FileUpload

name: IT FileUpload

on:
  schedule:
    - cron: '0 8 * * *'

permissions:
  contents: read

jobs:
  nightly:
    if: github.repository == 'primefaces/primefaces' && github.ref == 'refs/heads/master'
    runs-on: ubuntu-latest
    name: Java ${{ matrix.java }}, Profile ${{ matrix.profile }}
    strategy:
      fail-fast: false
      matrix:
        java: [11, 17]
        profile: [
          'headless,firefox,myfaces-2.3,uploader-native', 'headless,firefox,mojarra-2.3,uploader-native',
          'headless,firefox,myfaces-2.3,uploader-commons', 'headless,firefox,mojarra-2.3,uploader-commons',
          'headless,chrome,myfaces-2.3,uploader-native', 'headless,chrome,mojarra-2.3,uploader-native',
          'headless,chrome,myfaces-2.3,uploader-commons', 'headless,chrome,mojarra-2.3,uploader-commons'
        ]

    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}
      - name: Cache Maven packages
        uses: actions/cache@v4
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2
      - name: Log github.ref
        run: echo "${{ github.ref }}"
      - name: Build
        run: mvn clean install -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 --batch-mode --show-version
      - name: Integration Tests FileUpload
        run: >
            mvn -B -V clean install -fprimefaces-integration-tests/pom.xml -Pintegration-tests,${{ matrix.profile }}
            -Dit.test=org.primefaces.integrationtests.fileupload.FileUpload*Test


IT Safari

name: IT Safari

on:
  schedule:
    - cron: '0 7 * * *'

permissions:
  contents: read

jobs:
  nightly:
    if: github.repository == 'primefaces/primefaces' && github.ref == 'refs/heads/master'
    runs-on: macos-latest
    name: Java ${{ matrix.java }}, Profile ${{ matrix.profile }}
    strategy:
      matrix:
        java: [11]
        profile: [ 'headless,safari,csp,theme-nova,mojarra-2.3' ]

    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}
      - name: Cache Maven packages
        uses: actions/cache@v4
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2
      - name: Log github.ref
        run: echo "${{ github.ref }}"
      - name: Build
        run: mvn clean install -Pquick -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 --batch-mode --show-version
      - name: Integration Tests
        run: mvn -B -V clean install -fprimefaces-integration-tests/pom.xml -Pintegration-tests,${{ matrix.profile }}


IT

name: IT

on:
  workflow_dispatch:
  schedule:
    - cron: '0 6 * * *'

env:
  SCREENSHOT_DIRECTORY: '/tmp/pf_it/'

permissions:
  contents: read

jobs:
  nightly:
    if: github.repository == 'primefaces/primefaces' && github.ref == 'refs/heads/master'
    runs-on: ubuntu-20.04
    name: Java ${{ matrix.java }}, ${{ matrix.profile }}
    strategy:
      fail-fast: false
      matrix:
        java: [11, 17, 21]
        profile: [ 'firefox,theme-saga,myfaces-2.3', 'firefox,csp,theme-saga,myfaces-2.3', 'chrome,theme-saga,myfaces-2.3', 'chrome,theme-saga,myfaces-next-2.3','chrome,csp,theme-nova,myfaces-2.3', 'chrome,csp,theme-nova,mojarra-2.3', 'chrome,client-state-saving,theme-nova,mojarra-2.3' ]

    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}
          cache: 'maven'
      - name: Log github.ref
        run: echo "${{ github.ref }}"
      - name: Build
        run: mvn clean install -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 --batch-mode --show-version
      - name: Integration Tests
        run: mvn -B -V clean install -fprimefaces-integration-tests/pom.xml -Pintegration-tests,headless,${{ matrix.profile }}
      - name: Upload failure-screenshots
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: failed_tests_screenshots_java${{ matrix.java }}_${{ matrix.facesimpl }}
          if-no-files-found: ignore
          path: /tmp/pf_it/


Stale Issues

name: Stale Issues
on:
  schedule:
    - cron: "0 1 * * *"
permissions:
  contents: read

jobs:
  stale:
    permissions:
      issues: write  # for actions/stale to close stale issues
      pull-requests: write  # for actions/stale to close stale PRs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v9
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          stale-issue-message: 'This issue is marked as stale because there was no activity on it for the last 2 years. Remove stale label or comment or this will be closed in 30 days'
          stale-pr-message: 'This PR is marked as stale because there was no activity on it for the last 2 years. Remove stale label or comment or this will be closed in 30 days'
          exempt-issue-labels: 'new feature,enhancement,theme'
          days-before-stale: 730
          days-before-close: 30


#  Copyright 2021 Google LLC
#
#  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
#
#  https://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: cancel_previous
on: [push]
jobs:
  cancel:
    name: "Cancel Previous Runs"
    runs-on: ubuntu-latest
    timeout-minutes: 3
    steps:
      - uses: styfle/cancel-workflow-action@0.12.1
        with:
          workflow_id: 5958127
          access_token: ${{ github.token }}


#  Copyright 2021 Google LLC
#
#  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
#
#  https://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: google_mobile_ads

on:
  pull_request:
    paths:
      - "packages/google_mobile_ads/**"
      - ".github/workflows/google_mobile_ads.yaml"
      - "packages/google_mobile_ads/ios/**"
      - "packages/google_mobile_ads/android/**"
  push:
    branches:
      - main

env:
  GOOGLEMOBILEADS_PLUGIN_SCOPE: "*google_mobile_ads*"
  GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE: "*google_mobile_ads_example*"
jobs:
  android:
    runs-on: macos-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
      - name: "Build Example"
        run: ./.github/workflows/scripts/build-example.sh android ./lib/main.dart packages/google_mobile_ads/example
      - name: "Unit Tests"
        run: |
          cd packages/google_mobile_ads/example/android
          ./gradlew :google_mobile_ads:testDebugUnitTest

  iOS:
    runs-on: macos-latest
    timeout-minutes: 40
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: |
          ./.github/workflows/scripts/install-tools.sh
      - name: "Build iOS Example"
        run: ./.github/workflows/scripts/build-example.sh ios ./lib/main.dart packages/google_mobile_ads/example
      - name: "Unit Tests"
        run: |
          cd packages/google_mobile_ads/example/ios
          flutter clean
          flutter pub get
          pod install
          xcodebuild -configuration Debug -resultBundlePath TestResults VERBOSE_SCRIPT_LOGGING=YES -workspace Runner.xcworkspace -scheme Runner -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' test
      - uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: iOSTestResults
          path: packages/google_mobile_ads/example/ios/TestResults.xcresult
  flutter:
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
      - name: "Unit Tests"
        run: |
          cd packages/google_mobile_ads/
          flutter test
      - name: "Flutter Analyze"
        run: |
          cd packages/google_mobile_ads/
          flutter analyze
      - name: "Flutter Publish"
        run: |
          cd packages/google_mobile_ads/
          flutter pub publish --dry-run
      - name: "Flutter Format"
        run: |
          flutter pub global activate flutter_plugin_tools
          flutter pub global run flutter_plugin_tools format
          ./.github/workflows/scripts/validate-formatting.sh


No Response

name: No Response

# Both `issue_comment` and `scheduled` event types are required for this Action
# to work properly.
on:
  issue_comment:
    types: [created]
  schedule:
    # Schedule for One minute after the hour, every hour
    - cron: '1 * * * *'

# By specifying the access of one of the scopes, all of those that are not
# specified are set to 'none'.
permissions:
  issues: write

jobs:
  noResponse:
    runs-on: ubuntu-latest
    if: ${{ github.repository == 'googleads/googleads-mobile-flutter' }}
    steps:
      - uses: lee-dohm/no-response@v0.5.0
        with:
          token: ${{ github.token }}
          # Comment to post when closing an Issue for lack of response. Set to `false` to disable
          closeComment: >
            Without additional information, we are unfortunately not sure how to
            resolve this issue. We are therefore reluctantly going to close this
            bug for now.
            If you find this problem please file a new issue with the same description,
            what happens, logs and the output of 'flutter doctor -v'. All system setups
            can be slightly different so it's always better to open new issues and reference
            the related ones.
            Thanks for your contribution.
          # Number of days of inactivity before an issue is closed for lack of response.
          daysUntilClose: 21
          # Label requiring a response.
          responseRequiredLabel: "feedback required"


Build Status

name: Build Status

# Step 1: Build on pull-requests or pushes to main
on:
  push:
    branches:
      - "packages/google_mobile_ads/**"
      - "{{ matrix.regex }}/**"
      - ".github/workflows/build.yaml"
  pull_request:
    branches:
    - "**"

jobs:
# Step 2: Build Android
  android:
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    strategy:
      fail-fast: false
      matrix:
        regex:
        - "samples/admob/app_open_example"
        - "samples/admob/banner_example"
        - "samples/admob/interstitial_example"
        - "samples/admob/mediation_example"
        - "samples/admob/native_platform_example"
        - "samples/admob/native_template_example"
        - "samples/admob/rewarded_example"
        - "samples/admob/rewarded_interstitial_example"
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
        env:
          GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE: ${{ matrix.REGEX }}
      - name: "Build Android Example"
        run: ./.github/workflows/scripts/build-example.sh android ./lib/main.dart $GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE
        env:
          GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE: ${{ matrix.REGEX }}

# Step 2: Build iOS
  iOS:
    runs-on: macOS-latest
    if: github.event_name == 'pull_request'
    strategy:
      fail-fast: false
      matrix:
        regex:
        - "samples/admob/app_open_example"
        - "samples/admob/banner_example"
        - "samples/admob/interstitial_example"
        - "samples/admob/mediation_example"
        - "samples/admob/native_platform_example"
        - "samples/admob/native_template_example"
        - "samples/admob/rewarded_example"
        - "samples/admob/rewarded_interstitial_example"
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
        env:
          GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE: ${{ matrix.REGEX }}
      - name: "Build iOS Example"
        run: ./.github/workflows/scripts/build-example.sh ios ./lib/main.dart $GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE
        env:
          GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE: ${{ matrix.REGEX }}

# Step 3: Build Flutter
  flutter:
    name: Build Flutter
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    strategy:
      fail-fast: false
      matrix:
        regex:
        - "samples/admob/app_open_example"
        - "samples/admob/banner_example"
        - "samples/admob/interstitial_example"
        - "samples/admob/mediation_example"
        - "samples/admob/native_platform_example"
        - "samples/admob/native_template_example"
        - "samples/admob/rewarded_example"
        - "samples/admob/rewarded_interstitial_example"
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
        env:
          GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE: ${{ matrix.REGEX }}
      - name: "Flutter Analyze"
        run: |
          cd $GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE
          flutter analyze
        env:
          GOOGLEMOBILEADS_PLUGIN_SCOPE_EXAMPLE: ${{ matrix.REGEX }}
      - name: "Flutter Format"
        run: |
          flutter pub global activate flutter_plugin_tools
          flutter pub global run flutter_plugin_tools format
          ./.github/workflows/scripts/validate-formatting.sh


#  Copyright 2024 Google LLC
#
#  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
#
#  https://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: gma_mediation_unity

on:
  pull_request:
    paths:
      - "packages/mediation/gma_mediation_unity/**"
      - ".github/workflows/gma_mediation_unity.yaml"
      - "packages/mediation/gma_mediation_unity/ios/**"
      - "packages/mediation/gma_mediation_unity/android/**"
  push:
    branches:
      - main

jobs:
  android:
    runs-on: macos-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
      - name: "Build Example"
        run: ./.github/workflows/scripts/build-example.sh android ./lib/main.dart packages/mediation/gma_mediation_unity/example
      - name: "Unit Tests"
        run: |
          cd packages/mediation/gma_mediation_unity/example/android
          ./gradlew :gma_mediation_unity:testDebugUnitTest

  iOS:
    runs-on: macos-latest
    timeout-minutes: 40
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: |
          ./.github/workflows/scripts/install-tools.sh
      - name: "Unit Tests"
        run: |
          cd packages/mediation/gma_mediation_unity/example/ios
          flutter clean
          flutter pub get
          flutter precache --ios
          pod install
          xcodebuild -configuration Debug -resultBundlePath TestResults VERBOSE_SCRIPT_LOGGING=YES -workspace Runner.xcworkspace -scheme Runner -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' test
      - uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: iOSTestResults
          path: packages/mediation/gma_mediation_unity/example/ios/TestResults.xcresult

  flutter:
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
      - name: "Flutter Analyze"
        run: |
          cd packages/mediation/gma_mediation_unity/
          flutter analyze
      - name: "Flutter Publish"
        run: |
          cd packages/mediation/gma_mediation_unity/
          flutter pub publish --dry-run
      - name: "Flutter Format"
        run: |
          flutter pub global activate flutter_plugin_tools
          flutter pub global run flutter_plugin_tools format
          ./.github/workflows/scripts/validate-formatting.sh


#  Copyright 2024 Google LLC
#
#  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
#
#  https://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: gma_mediation_meta

on:
  pull_request:
    paths:
    - "packages/mediation/gma_mediation_meta/**"
    - ".github/workflows/gma_mediation_meta.yaml"
    - "packages/mediation/gma_mediation_meta/ios/**"
    - "packages/mediation/gma_mediation_meta/android/**"
  push:
    branches:
    - main

jobs:
  flutter:
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
      with:
        fetch-depth: 0
    - name: "Install Flutter"
      run: ./.github/workflows/scripts/install-flutter.sh stable
    - name: "Install Tools"
      run: ./.github/workflows/scripts/install-tools.sh
    - name: "Flutter Analyze"
      run: |
        cd packages/mediation/gma_mediation_meta
        flutter analyze
    - name: "Flutter Publish"
      run: |
        cd packages/mediation/gma_mediation_meta
        flutter pub publish --dry-run
    - name: "Flutter Format"
      run: |
        flutter pub global activate flutter_plugin_tools
        flutter pub global run flutter_plugin_tools format
        ./.github/workflows/scripts/validate-formatting.sh


#  Copyright 2024 Google LLC
#
#  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
#
#  https://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: gma_mediation_applovin

on:
  pull_request:
    paths:
      - "packages/mediation/gma_mediation_applovin/**"
      - ".github/workflows/gma_mediation_applovin.yaml"
      - "packages/mediation/gma_mediation_applovin/ios/**"
      - "packages/mediation/gma_mediation_applovin/android/**"
  push:
    branches:
      - main

jobs:
  android:
    runs-on: macos-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
      - name: "Build Example"
        run: ./.github/workflows/scripts/build-example.sh android ./lib/main.dart packages/mediation/gma_mediation_applovin/example
      - name: "Unit Tests"
        run: |
          cd packages/mediation/gma_mediation_applovin/example/android
          ./gradlew :gma_mediation_applovin:testDebugUnitTest

  iOS:
    runs-on: macos-latest
    timeout-minutes: 40
    steps:
      - uses: swift-actions/setup-swift@v2
        with:
          swift-version: "5.7.2"
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: |
          ./.github/workflows/scripts/install-tools.sh
      - name: "Unit Tests"
        run: |
          cd packages/mediation/gma_mediation_applovin/example/ios
          flutter clean
          flutter pub get
          flutter precache --ios
          pod install
          xcodebuild -configuration Debug -resultBundlePath TestResults VERBOSE_SCRIPT_LOGGING=YES -workspace Runner.xcworkspace -scheme Runner -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' test
      - uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: iOSTestResults
          path: packages/mediation/gma_mediation_applovin/example/ios/TestResults.xcresult
  flutter:
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
      - name: "Flutter Analyze"
        run: |
          cd packages/mediation/gma_mediation_applovin/
          flutter analyze
      - name: "Flutter Publish"
        run: |
          cd packages/mediation/gma_mediation_applovin/
          flutter pub publish --dry-run
      - name: "Flutter Format"
        run: |
          flutter pub global activate flutter_plugin_tools
          flutter pub global run flutter_plugin_tools format
          ./.github/workflows/scripts/validate-formatting.sh


#  Copyright 2024 Google LLC
#
#  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
#
#  https://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: gma_mediation_liftoffmonetize

on:
  pull_request:
    paths:
      - "packages/mediation/gma_mediation_liftoffmonetize/**"
      - ".github/workflows/gma_mediation_liftoffmonetize.yaml"
      - "packages/mediation/gma_mediation_liftoffmonetize/ios/**"
      - "packages/mediation/gma_mediation_liftoffmonetize/android/**"
  push:
    branches:
      - master

jobs:
  android:
    runs-on: macos-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
      - name: "Build Example"
        run: ./.github/workflows/scripts/build-example.sh android ./lib/main.dart packages/mediation/gma_mediation_liftoffmonetize/example
      - name: "Unit Tests"
        run: |
          cd packages/mediation/gma_mediation_liftoffmonetize/example/android
          ./gradlew :gma_mediation_liftoffmonetize:testDebugUnitTest

  iOS:
    runs-on: macos-latest
    timeout-minutes: 40
    steps:
      - uses: swift-actions/setup-swift@v2
        with:
          swift-version: "5.7.2"
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: |
          ./.github/workflows/scripts/install-tools.sh
      - name: "Unit Tests"
        run: |
          cd packages/mediation/gma_mediation_liftoffmonetize/example/ios
          flutter clean
          flutter pub get
          flutter precache --ios
          pod install
          xcodebuild -configuration Debug -resultBundlePath TestResults VERBOSE_SCRIPT_LOGGING=YES -workspace Runner.xcworkspace -scheme Runner -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' test
      - uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: iOSTestResults
          path: packages/mediation/gma_mediation_liftoffmonetize/example/ios/TestResults.xcresult

  flutter:
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
      - name: "Flutter Analyze"
        run: |
          cd packages/mediation/gma_mediation_liftoffmonetize
          flutter analyze
      - name: "Flutter Publish"
        run: |
          cd packages/mediation/gma_mediation_liftoffmonetize
          flutter pub publish --dry-run
      - name: "Flutter Format"
        run: |
          flutter pub global activate flutter_plugin_tools
          flutter pub global run flutter_plugin_tools format
          ./.github/workflows/scripts/validate-formatting.sh


#  Copyright 2024 Google LLC
#
#  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
#
#  https://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: gma_mediation_pangle

on:
  pull_request:
    paths:
      - "packages/mediation/gma_mediation_pangle/**"
      - ".github/workflows/gma_mediation_pangle.yaml"
      - "packages/mediation/gma_mediation_pangle/ios/**"
      - "packages/mediation/gma_mediation_pangle/android/**"
  push:
    branches:
      - main

jobs:
  flutter:
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          fetch-depth: 0
      - name: "Install Flutter"
        run: ./.github/workflows/scripts/install-flutter.sh stable
      - name: "Install Tools"
        run: ./.github/workflows/scripts/install-tools.sh
      - name: "Flutter Analyze"
        run: |
          cd packages/mediation/gma_mediation_pangle/
          flutter analyze
      - name: "Flutter Publish"
        run: |
          cd packages/mediation/gma_mediation_pangle/
          flutter pub publish --dry-run
      - name: "Flutter Format"
        run: |
          flutter pub global activate flutter_plugin_tools
          flutter pub global run flutter_plugin_tools format
          ./.github/workflows/scripts/validate-formatting.sh