123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- name: Build SPC Binary
- on:
- push:
- branches: [ "main" ]
- release:
- types:
- - published
- workflow_dispatch:
- env:
- PHP_VERSION: 8.2
- MICRO_VERSION: 8.2.18
- 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-13"
- 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@v4"
- - 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
- - 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@v4"
- 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:extensions
- 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"
- if: github.repository == 'crazywhalecc/static-php-cli'
- 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: static-php-cli/spc-bin/nightly/
- endpoint: ${{ secrets.AWS_ENDPOINT }}
- - name: "Upload Artifact"
- uses: actions/upload-artifact@v4
- with:
- path: spc${{ env.SUFFIX }}
- name: spc-${{ matrix.operating-system.name }}${{ env.SUFFIX }}
|