Skip to content
Snippets Groups Projects
build-release.yml 3.06 KiB
Newer Older
---

name: Build release

on:  # yamllint disable-line rule:truthy
  push:
    tags:
      - '*'
Tim van Dijen's avatar
Tim van Dijen committed
  workflow_dispatch:

jobs:
  build:
    name: Build release
    runs-on: [ubuntu-latest]
    strategy:
      fail-fast: false
      matrix:
        version: ['slim', 'full']

    steps:
      - name: Setup PHP, with composer and extensions
        id: setup-php
        # https://github.com/shivammathur/setup-php
        uses: shivammathur/setup-php@v2
        with:
          # Should match the minimum required version for SimpleSAMLphp
          php-version: '8.0'
          tools: composer:v2, phive
          extensions: mbstring, xml
          coverage: none

      - name: Setup problem matchers for PHP
        run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"

Tim van Dijen's avatar
Tim van Dijen committed
      - uses: actions/checkout@v4
Tim van Dijen's avatar
Tim van Dijen committed
      # Store the version, stripping any v-prefix
      - name: Write release version
        run: |
Tim van Dijen's avatar
Tim van Dijen committed
          TAG="${{ github.ref_name }}"
Tim van Dijen's avatar
Tim van Dijen committed
          echo "TAG=${TAG}" >> "$GITHUB_ENV"
          echo "VERSION=${TAG#v}" >> "$GITHUB_ENV"
          echo "COMPOSER_VERSION=$(composer config version)" >> "$GITHUB_ENV"

      - name: Validate composer.json and composer.lock
        run: composer validate

      - name: Make sure a version is set in composer.json that matches the tag
Tim van Dijen's avatar
Tim van Dijen committed
        if: "${{ env.COMPOSER_VERSION != env.TAG }}"

      - name: Install Composer dependencies
        run: composer install --no-progress --no-dev --prefer-dist --optimize-autoloader

      - name: Install SimpleSAMLphp modules
        env:
          FILE: ".github/build/${{ matrix.version }}.json"
        run: |
          for k in $(jq '.modules | keys | .[]' "$FILE"); do
            module=$(jq -r ".modules[$k]" "$FILE");
            if [ -n "$module" ];
            then
              repository=$(jq -r '.repository' <<< "$module");
              v=$(jq -r '.version' <<< "$module");

              composer require "$repository:$v" --update-no-dev --ignore-platform-reqs
            fi
          done

      - name: Add composer.phar to the release
        run: phive --no-progress install --trust-gpg-keys CBB3D576F2A0946F --copy --target ./bin composer

      - name: Clean release
        run: |
Tim van Dijen's avatar
Tim van Dijen committed
          grep export-ignore .gitattributes | cut -d ' ' -f 1 | while IFS= read -r line
Tim van Dijen's avatar
Tim van Dijen committed
            rm -rf "$line"
          done
          rm -rf .git

      - name: Build tarball
        run: |
          cd ..
Tim van Dijen's avatar
Tim van Dijen committed
          cp -R  simplesamlphp "simplesamlphp-$VERSION"
          TARGET="/tmp/simplesamlphp-$VERSION-${{ matrix.version }}.tar.gz"
          # remove -slim from the filename for our minimalistic build
          TARGET=${TARGET/-slim/}
          echo "VERSION=$TARGET" >> "$GITHUB_ENV"
          tar --owner 0 --group 0 -cvzf "$TARGET" "simplesamlphp-$VERSION"
          rm -rf "simplesamlphp-$VERSION"

      - name: Save tarball
        uses: actions/upload-artifact@v3
        with:
          name: release-${{ matrix.version }}
          retention-days: 1

      - name: Calculate SHA checksum (${{ matrix.version }})