name: Build phar

on:
  push:
    branches:
      - master
  release:
    types:
      - published

permissions:
  contents: read

jobs:
  pre_job:
    permissions:
      actions: write
    runs-on: ubuntu-latest
    outputs:
      should_skip: ${{ steps.skip_check.outputs.should_skip }}
    steps:
      - id: skip_check
        uses: fkirc/skip-duplicate-actions@v5.3.0
        with:
          concurrent_skipping: always
          cancel_others: true
          do_not_skip: '["release"]'
          # list files that may affect or are included into the built phar
          paths: '["bin/**", "assets/**", "build/**", "dictionaries/**", "src/**", "stubs/**", "psalm", "psalm-language-server", "psalm-plugin", "psalm-refactor", "psalter", "box.json.dist", "composer.json", "config.xsd", "keys.asc.gpg", "scoper.inc.php"]'

  build-phar:
    permissions:
      contents: write # for release
    needs: pre_job
    if: ${{ needs.pre_job.outputs.should_skip != 'true' }}
    runs-on: ubuntu-latest
    steps:
      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
          tools: composer:v2
          coverage: none
        env:
          fail-fast: true

      - uses: actions/checkout@v3
        with:
          fetch-depth: 0 # required for composer to automatically detect root package version

      - name: Get Composer Cache Directories
        id: composer-cache
        run: |
          echo "files_cache=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
          echo "vcs_cache=$(composer config cache-vcs-dir)" >> $GITHUB_OUTPUT

      - name: Generate composer.lock
        run: |
          composer update --no-install

      - name: Cache composer cache
        uses: actions/cache@v3
        with:
          path: |
            ${{ steps.composer-cache.outputs.files_cache }}
            ${{ steps.composer-cache.outputs.vcs_cache }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: |
            ${{ runner.os }}-composer-

      - name: Run composer install
        run: composer install -o
          # DO NOT set this, we need composer to figure out the version itself
          # env:
          #   COMPOSER_ROOT_VERSION: dev-master

      - run: bin/build-phar.sh
        env:
          GPG_SIGNING: 1
          GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }}
          GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}

      - name: Upload release assets
        if: ${{ github.event_name == 'release' }}
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: build/psalm.phar*
          file_glob: true
          tag: ${{ github.ref }}
          
      - name: Release psalm/phar
        run: bin/github-deploy-phar.sh
        env:
          PHAR_REPO_TOKEN: ${{ secrets.PHAR_REPO_TOKEN }}

