diff --git a/.github/workflows/build-unix.yml b/.github/workflows/build-unix.yml index 083b464c..3b088273 100644 --- a/.github/workflows/build-unix.yml +++ b/.github/workflows/build-unix.yml @@ -276,7 +276,7 @@ jobs: # Upload debug logs - if: ${{ inputs.debug && failure() }} name: "Upload build logs on failure" - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v8 with: name: spc-logs-${{ inputs.php-version }}-${{ inputs.os }} path: log/*.log @@ -284,7 +284,7 @@ jobs: # Upload cli executable - if: ${{ inputs.build-cli == true }} name: "Upload PHP cli SAPI" - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v8 with: name: php-cli-${{ inputs.php-version }}-${{ inputs.os }} path: buildroot/bin/php @@ -292,7 +292,7 @@ jobs: # Upload micro self-extracted executable - if: ${{ inputs.build-micro == true }} name: "Upload PHP micro SAPI" - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v8 with: name: php-micro-${{ inputs.php-version }}-${{ inputs.os }} path: buildroot/bin/micro.sfx @@ -300,7 +300,7 @@ jobs: # Upload fpm executable - if: ${{ inputs.build-fpm == true }} name: "Upload PHP fpm SAPI" - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v8 with: name: php-fpm-${{ inputs.php-version }}-${{ inputs.os }} path: buildroot/bin/php-fpm @@ -308,7 +308,7 @@ jobs: # Upload frankenphp executable - if: ${{ inputs['build-frankenphp'] == true }} name: "Upload FrankenPHP SAPI" - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v8 with: name: php-frankenphp-${{ inputs.php-version }}-${{ inputs.os }} path: buildroot/bin/frankenphp @@ -316,17 +316,17 @@ jobs: # Upload extensions metadata - if: ${{ inputs['shared-extensions'] != '' }} name: "Upload shared extensions" - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v8 with: name: php-shared-ext-${{ inputs.php-version }}-${{ inputs.os }} path: | buildroot/modules/*.so - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v8 name: "Upload License Files" with: name: license-files-${{ inputs.php-version }}-${{ inputs.os }} path: buildroot/license/ - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v8 name: "Upload Build Metadata" with: name: build-meta-${{ inputs.php-version }}-${{ inputs.os }} diff --git a/.github/workflows/build-windows-x86_64.yml b/.github/workflows/build-windows-x86_64.yml index a53d9e43..6fa9f25d 100644 --- a/.github/workflows/build-windows-x86_64.yml +++ b/.github/workflows/build-windows-x86_64.yml @@ -94,24 +94,24 @@ jobs: # Upload cli executable - if: ${{ inputs.build-cli == true }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v8 with: name: php-${{ inputs.version }} path: buildroot/bin/php.exe # Upload micro self-extracted executable - if: ${{ inputs.build-micro == true }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v8 with: name: micro-${{ inputs.version }} path: buildroot/bin/micro.sfx # Upload extensions metadata - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v8 with: name: license-files path: buildroot/license/ - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v8 with: name: build-meta path: | diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 4127c2dc..6745fffb 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -1,187 +1,187 @@ -name: Build SPC Binary - -on: - push: - branches: [ "main", "v3" ] - pull_request: - branches: [ "main", "v3" ] - paths: - - '.github/workflows/release-build.yml' - release: - types: - - published - workflow_dispatch: - -env: - PHP_VERSION: 8.4 - MICRO_VERSION: 8.4.11 - -jobs: - build-release-artifacts: - name: "Build SPC Binary for ${{ matrix.operating-system.name }}" - runs-on: ${{ matrix.operating-system.os }} - strategy: - matrix: - operating-system: - - name: "linux-x86_64" - os: "ubuntu-latest" - filename: "spc-linux-x86_64.tar.gz" - - name: "macos-x86_64" - os: "macos-15-intel" - filename: "spc-macos-x86_64.tar.gz" - - name: "linux-aarch64" - os: "ubuntu-latest" - filename: "spc-linux-aarch64.tar.gz" - - name: "macos-aarch64" - os: "macos-14" - filename: "spc-macos-aarch64.tar.gz" - - name: "windows-x64" - os: "ubuntu-latest" - filename: "spc-windows-x64.exe" - steps: - - name: "Checkout" - uses: "actions/checkout@v5" - - - if: inputs.debug == true - run: echo "SPC_BUILD_DEBUG=--debug" >> $GITHUB_ENV - - - name: "Install PHP for official runners" - uses: shivammathur/setup-php@v2 - with: - coverage: none - tools: composer:v2 - php-version: "${{ env.PHP_VERSION }}" - ini-values: memory_limit=-1 - extensions: curl, openssl, mbstring - - - name: "Get Composer Cache Directory" - id: composer-cache - run: | - echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - - - name: "Cache Composer dependencies" - uses: "actions/cache@v5" - with: - path: "${{ steps.composer-cache.outputs.dir }}" - key: "php-${{ env.PHP_VERSION }}-locked-composer-${{ hashFiles('**/composer.lock') }}" - restore-keys: | - php-${{ env.PHP_VERSION }}-locked-composer - - - name: "Install Locked Dependencies" - run: "composer install --no-interaction --no-progress" - - - name: "Build PHAR File" - run: "composer build:phar" - - - name: "Download Minimal Combination" - run: | - if [ "${{ matrix.operating-system.name }}" = "windows-x64" ]; then - curl -fsSL https://dl.static-php.dev/static-php-cli/windows/spc-min/php-${{ env.MICRO_VERSION }}-micro-win.zip -o tmp.zip - unzip tmp.zip - else - curl -fsSL https://dl.static-php.dev/static-php-cli/minimal/php-${{ env.MICRO_VERSION }}-micro-${{ matrix.operating-system.name }}.tar.gz -o tmp.tgz - tar -zxvf tmp.tgz - fi - - - name: "Generate Executable" - run: | - bin/spc micro:combine spc.phar -M micro.sfx -O spc -I "memory_limit=2G" - if [ "${{ matrix.operating-system.name }}" = "windows-x64" ]; then - mv spc spc.exe - else - chmod +x spc - fi - if [ "${{ matrix.operating-system.name }}" = "macos-aarch64" ] || [ "${{ matrix.operating-system.name }}" = "macos-x86_64" ]; then - sudo xattr -cr ./spc - fi - - - name: "Archive Executable and Validate Binary" - run: | - if [ "${{ matrix.operating-system.name }}" != "windows-x64" ]; then - tar -czf ${{ matrix.operating-system.filename }} spc - # validate spc binary - if [ "${{ matrix.operating-system.name }}" == "linux-x86_64" ]; then - ./spc dev:info php - fi - fi - - - name: "Copy file" - run: | - if [ "${{ matrix.operating-system.name }}" != "windows-x64" ]; then - mkdir dist/ && cp ${{ matrix.operating-system.filename }} dist/ && cp spc dist/spc-${{ matrix.operating-system.name }} - else - mkdir dist/ && cp spc.exe dist/${{ matrix.operating-system.filename }} - echo "SUFFIX=.exe" >> $GITHUB_ENV - fi - - - name: "Upload Binaries to Release" - uses: softprops/action-gh-release@v1 - if: ${{startsWith(github.ref, 'refs/tags/') }} - with: - files: dist/${{ matrix.operating-system.filename }} - - - name: "Deploy to self-hosted OSS (latest)" - # only run this step if the repository is static-php-cli and is release tag - if: ${{ github.repository == 'crazywhalecc/static-php-cli' && startsWith(github.ref, 'refs/tags/') }} - uses: static-php/upload-s3-action@v1.0.0 - with: - aws_key_id: ${{ secrets.AWS_KEY_ID }} - aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws_bucket: ${{ secrets.AWS_BUCKET }} - source_dir: "dist/" - destination_dir: v3/spc-bin/latest/ - endpoint: ${{ secrets.AWS_ENDPOINT }} - - - name: "Deploy to self-hosted OSS (versioned)" - # only run this step if the repository is static-php-cli and is release tag - if: ${{ github.repository == 'crazywhalecc/static-php-cli' && startsWith(github.ref, 'refs/tags/') }} - uses: static-php/upload-s3-action@v1.0.0 - with: - aws_key_id: ${{ secrets.AWS_KEY_ID }} - aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws_bucket: ${{ secrets.AWS_BUCKET }} - source_dir: "dist/" - destination_dir: v3/spc-bin/${{ github.ref_name }}/ - endpoint: ${{ secrets.AWS_ENDPOINT }} - - - name: "Upload Artifact" - uses: actions/upload-artifact@v5 - with: - path: spc${{ env.SUFFIX }} - name: spc-${{ matrix.operating-system.name }}${{ env.SUFFIX }} - test-spc: - name: "Test SPC Binary for ${{ matrix.operating-system.name }}" - runs-on: ${{ matrix.operating-system.os }} - needs: [build-release-artifacts] - strategy: - matrix: - operating-system: - - name: "linux-x86_64" - os: "ubuntu-latest" - - name: "macos-x86_64" - os: "macos-15-intel" - - name: "linux-aarch64" - os: "ubuntu-24.04-arm" - - name: "macos-aarch64" - os: "macos-15" - - name: "windows-x64" - os: "windows-latest" - steps: - - name: "Checkout" - uses: actions/checkout@v5 - - - name: "Download Artifact" - uses: actions/download-artifact@v5 - env: - SUFFIX: ${{ matrix.operating-system.name == 'windows-x64' && '.exe' || '' }} - with: - name: spc-${{ matrix.operating-system.name }}${{ env.SUFFIX }} - - - name: "Chmod" - if: matrix.operating-system.name != 'windows-x64' - run: chmod +x spc - - - name: "Run SPC Tests" - env: - SUFFIX: ${{ matrix.operating-system.name == 'windows-x64' && '.exe' || '' }} - run: ./spc${{ env.SUFFIX }} dev:info php +name: Build SPC Binary + +on: + push: + branches: [ "main", "v3" ] + pull_request: + branches: [ "main", "v3" ] + paths: + - '.github/workflows/release-build.yml' + release: + types: + - published + workflow_dispatch: + +env: + PHP_VERSION: 8.4 + MICRO_VERSION: 8.4.11 + +jobs: + build-release-artifacts: + name: "Build SPC Binary for ${{ matrix.operating-system.name }}" + runs-on: ${{ matrix.operating-system.os }} + strategy: + matrix: + operating-system: + - name: "linux-x86_64" + os: "ubuntu-latest" + filename: "spc-linux-x86_64.tar.gz" + - name: "macos-x86_64" + os: "macos-15-intel" + filename: "spc-macos-x86_64.tar.gz" + - name: "linux-aarch64" + os: "ubuntu-latest" + filename: "spc-linux-aarch64.tar.gz" + - name: "macos-aarch64" + os: "macos-14" + filename: "spc-macos-aarch64.tar.gz" + - name: "windows-x64" + os: "ubuntu-latest" + filename: "spc-windows-x64.exe" + steps: + - name: "Checkout" + uses: "actions/checkout@v5" + + - if: inputs.debug == true + run: echo "SPC_BUILD_DEBUG=--debug" >> $GITHUB_ENV + + - name: "Install PHP for official runners" + uses: shivammathur/setup-php@v2 + with: + coverage: none + tools: composer:v2 + php-version: "${{ env.PHP_VERSION }}" + ini-values: memory_limit=-1 + extensions: curl, openssl, mbstring + + - name: "Get Composer Cache Directory" + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - name: "Cache Composer dependencies" + uses: "actions/cache@v5" + with: + path: "${{ steps.composer-cache.outputs.dir }}" + key: "php-${{ env.PHP_VERSION }}-locked-composer-${{ hashFiles('**/composer.lock') }}" + restore-keys: | + php-${{ env.PHP_VERSION }}-locked-composer + + - name: "Install Locked Dependencies" + run: "composer install --no-interaction --no-progress" + + - name: "Build PHAR File" + run: "composer build:phar" + + - name: "Download Minimal Combination" + run: | + if [ "${{ matrix.operating-system.name }}" = "windows-x64" ]; then + curl -fsSL https://dl.static-php.dev/static-php-cli/windows/spc-min/php-${{ env.MICRO_VERSION }}-micro-win.zip -o tmp.zip + unzip tmp.zip + else + curl -fsSL https://dl.static-php.dev/static-php-cli/minimal/php-${{ env.MICRO_VERSION }}-micro-${{ matrix.operating-system.name }}.tar.gz -o tmp.tgz + tar -zxvf tmp.tgz + fi + + - name: "Generate Executable" + run: | + bin/spc micro:combine spc.phar -M micro.sfx -O spc -I "memory_limit=2G" + if [ "${{ matrix.operating-system.name }}" = "windows-x64" ]; then + mv spc spc.exe + else + chmod +x spc + fi + if [ "${{ matrix.operating-system.name }}" = "macos-aarch64" ] || [ "${{ matrix.operating-system.name }}" = "macos-x86_64" ]; then + sudo xattr -cr ./spc + fi + + - name: "Archive Executable and Validate Binary" + run: | + if [ "${{ matrix.operating-system.name }}" != "windows-x64" ]; then + tar -czf ${{ matrix.operating-system.filename }} spc + # validate spc binary + if [ "${{ matrix.operating-system.name }}" == "linux-x86_64" ]; then + ./spc dev:info php + fi + fi + + - name: "Copy file" + run: | + if [ "${{ matrix.operating-system.name }}" != "windows-x64" ]; then + mkdir dist/ && cp ${{ matrix.operating-system.filename }} dist/ && cp spc dist/spc-${{ matrix.operating-system.name }} + else + mkdir dist/ && cp spc.exe dist/${{ matrix.operating-system.filename }} + echo "SUFFIX=.exe" >> $GITHUB_ENV + fi + + - name: "Upload Binaries to Release" + uses: softprops/action-gh-release@v1 + if: ${{startsWith(github.ref, 'refs/tags/') }} + with: + files: dist/${{ matrix.operating-system.filename }} + + - name: "Deploy to self-hosted OSS (latest)" + # only run this step if the repository is static-php-cli and is release tag + if: ${{ github.repository == 'crazywhalecc/static-php-cli' && startsWith(github.ref, 'refs/tags/') }} + uses: static-php/upload-s3-action@v1.0.0 + with: + aws_key_id: ${{ secrets.AWS_KEY_ID }} + aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws_bucket: ${{ secrets.AWS_BUCKET }} + source_dir: "dist/" + destination_dir: v3/spc-bin/latest/ + endpoint: ${{ secrets.AWS_ENDPOINT }} + + - name: "Deploy to self-hosted OSS (versioned)" + # only run this step if the repository is static-php-cli and is release tag + if: ${{ github.repository == 'crazywhalecc/static-php-cli' && startsWith(github.ref, 'refs/tags/') }} + uses: static-php/upload-s3-action@v1.0.0 + with: + aws_key_id: ${{ secrets.AWS_KEY_ID }} + aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws_bucket: ${{ secrets.AWS_BUCKET }} + source_dir: "dist/" + destination_dir: v3/spc-bin/${{ github.ref_name }}/ + endpoint: ${{ secrets.AWS_ENDPOINT }} + + - name: "Upload Artifact" + uses: actions/upload-artifact@v8 + with: + path: spc${{ env.SUFFIX }} + name: spc-${{ matrix.operating-system.name }}${{ env.SUFFIX }} + test-spc: + name: "Test SPC Binary for ${{ matrix.operating-system.name }}" + runs-on: ${{ matrix.operating-system.os }} + needs: [build-release-artifacts] + strategy: + matrix: + operating-system: + - name: "linux-x86_64" + os: "ubuntu-latest" + - name: "macos-x86_64" + os: "macos-15-intel" + - name: "linux-aarch64" + os: "ubuntu-24.04-arm" + - name: "macos-aarch64" + os: "macos-15" + - name: "windows-x64" + os: "windows-latest" + steps: + - name: "Checkout" + uses: actions/checkout@v5 + + - name: "Download Artifact" + uses: actions/download-artifact@v5 + env: + SUFFIX: ${{ matrix.operating-system.name == 'windows-x64' && '.exe' || '' }} + with: + name: spc-${{ matrix.operating-system.name }}${{ env.SUFFIX }} + + - name: "Chmod" + if: matrix.operating-system.name != 'windows-x64' + run: chmod +x spc + + - name: "Run SPC Tests" + env: + SUFFIX: ${{ matrix.operating-system.name == 'windows-x64' && '.exe' || '' }} + run: ./spc${{ env.SUFFIX }} dev:info php diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1f3c7318..2a4cdeff 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -206,7 +206,7 @@ jobs: - name: "Upload logs" if: ${{ always() && hashFiles('log/**') != '' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v8 with: name: build-logs-${{ matrix.os }}-${{ matrix.php }} path: log