diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index aaeee1ff..bb08fa05 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -1,175 +1,175 @@ -name: Build SPC Binary - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - 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@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 - 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@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" - # only run this step if the repository is static-php-cli and the branch is main - if: github.repository == 'crazywhalecc/static-php-cli' && github.ref == 'refs/heads/main' - 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 }} - 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@v4 - - - name: "Download Artifact" - uses: actions/download-artifact@v4 - 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:extensions +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@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 + 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@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" + # only run this step if the repository is static-php-cli and the branch is main + if: github.repository == 'crazywhalecc/static-php-cli' && github.ref == 'refs/heads/main' + 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 }} + 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@v4 + + - name: "Download Artifact" + uses: actions/download-artifact@v4 + 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:extensions diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6c2730fd..1f3c7318 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -106,6 +106,7 @@ jobs: run: SPC_LIBC=glibc vendor/bin/phpunit tests/ --no-coverage define-matrix: + if: false # TODO: enable when refactoring workflows name: "Define Matrix" runs-on: ubuntu-latest outputs: @@ -131,6 +132,7 @@ jobs: build: + if: false name: "Build PHP Test (PHP ${{ matrix.php }} ${{ matrix.os }})" runs-on: ${{ matrix.os }} needs: [define-matrix, php-cs-fixer, phpstan, phpunit] diff --git a/.github/workflows/vitepress-deploy.yml b/.github/workflows/vitepress-deploy.yml index 9101f11c..6eb37b4a 100644 --- a/.github/workflows/vitepress-deploy.yml +++ b/.github/workflows/vitepress-deploy.yml @@ -1,71 +1,71 @@ -name: Docs Auto Deploy -on: - push: - branches: - - main - paths: - - 'config/**.json' - - 'docs/**' - - 'package.json' - - 'yarn.lock' - - '.github/workflows/vitepress-deploy.yml' - -jobs: - build: - name: Deploy docs - runs-on: ubuntu-latest - if: github.repository == 'crazywhalecc/static-php-cli' - steps: - - name: Checkout master - uses: actions/checkout@v4 - - - uses: actions/setup-node@v3 - with: - cache: yarn - - - run: yarn install --frozen-lockfile - - - name: "Copy Config Files" - run: | - mkdir -p docs/.vitepress/config - cp -r config/* docs/.vitepress/config/ - - - name: "Install PHP for official runners" - uses: shivammathur/setup-php@v2 - with: - coverage: none - tools: composer:v2 - php-version: 8.4 - 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@v4" - with: - path: "${{ steps.composer-cache.outputs.dir }}" - key: "php-8.2-locked-composer-${{ hashFiles('**/composer.lock') }}" - restore-keys: | - php-8.2-locked-composer - - - name: "Install Locked Dependencies" - run: "composer install --no-interaction --no-progress" - - - name: "Generate Extension Support List" - run: | - bin/spc dev:gen-ext-docs > docs/extensions.md - bin/spc dev:gen-ext-dep-docs > docs/deps-map-ext.md - bin/spc dev:gen-lib-dep-docs > docs/deps-map-lib.md - - - name: Build - run: yarn docs:build - - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/.vitepress/dist +name: Docs Auto Deploy +on: + push: + branches: + - v3 + paths: + - 'config/**.yml' + - 'docs/**' + - 'package.json' + - 'yarn.lock' + - '.github/workflows/vitepress-deploy.yml' + +jobs: + build: + name: Deploy docs + runs-on: ubuntu-latest + if: github.repository == 'crazywhalecc/static-php-cli' + steps: + - name: Checkout + uses: actions/checkout@v4 + + - uses: actions/setup-node@v3 + with: + cache: yarn + + - run: yarn install --frozen-lockfile + + - name: "Copy Config Files" + run: | + mkdir -p docs/.vitepress/config + cp -r config/* docs/.vitepress/config/ + + - name: "Install PHP for official runners" + uses: shivammathur/setup-php@v2 + with: + coverage: none + tools: composer:v2 + php-version: 8.4 + 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@v4" + with: + path: "${{ steps.composer-cache.outputs.dir }}" + key: "php-8.2-locked-composer-${{ hashFiles('**/composer.lock') }}" + restore-keys: | + php-8.2-locked-composer + + - name: "Install Locked Dependencies" + run: "composer install --no-interaction --no-progress" + + - name: "Generate Extension Support List" + run: | + bin/spc dev:gen-ext-docs > docs/extensions.md + bin/spc dev:gen-ext-dep-docs > docs/deps-map-ext.md + bin/spc dev:gen-lib-dep-docs > docs/deps-map-lib.md + + - name: Build + run: yarn docs:build + + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs/.vitepress/dist