Mirror sources to dl.static-php.dev #105
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Mirror sources to dl.static-php.dev" | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: "0 1 */3 * *" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
jobs: | |
# define | |
define-matrix: | |
name: "Generate source matrix" | |
runs-on: ubuntu-latest | |
outputs: | |
sources: ${{ steps.step1.outputs.sources }} | |
steps: | |
- name: "Checkout" | |
uses: "actions/checkout@v4" | |
with: | |
repository: crazywhalecc/static-php-cli | |
- name: "Create Matrix Variable" | |
id: step1 | |
run: | | |
VALUE=$(cat config/source.json | jq -M -c keys) | |
echo 'sources='"$VALUE" >> "$GITHUB_OUTPUT" | |
# parse | |
download-source: | |
name: "Download ${{ matrix.source }}" | |
runs-on: ubuntu-latest | |
needs: define-matrix | |
timeout-minutes: 60 | |
strategy: | |
matrix: | |
source: ${{ fromJSON(needs.define-matrix.outputs.sources) }} | |
fail-fast: false | |
steps: | |
- name: "Checkout" | |
uses: "actions/checkout@v4" | |
with: | |
repository: crazywhalecc/static-php-cli | |
- name: "Setup static-php environment" | |
run: | | |
bin/setup-runtime | |
bin/php bin/composer install --no-dev --no-ansi -q --no-interaction | |
- name: "Download source ${{ matrix.source }}" | |
run: bin/php bin/spc download ${{ matrix.source }} --debug --ignore-cache-sources | |
- name: "Parse lock file and re-package with file" | |
run: | | |
rename_file() { | |
local src_file="$1" | |
local target="$2" | |
if [[ ! -f "$src_file" ]]; then | |
echo "Error: '$src_file' is not a valid file" >&2 | |
return 1 | |
fi | |
if [[ "$src_file" =~ \.tar\.(gz|xz)$ ]]; then | |
local ext=".tar.${BASH_REMATCH[1]}" | |
local base_name="${src_file%$ext}" | |
if [[ -z "$base_name" ]]; then | |
echo "Error: Invalid filename '$src_file'" >&2 | |
return 1 | |
fi | |
elif [[ "$src_file" =~ \.[^./]+$ ]]; then | |
local ext=".${src_file##*.}" | |
local base_name="${src_file%.$ext}" | |
else | |
echo "Skip: '$src_file' has no extension" >&2 | |
return 0 | |
fi | |
local new_name="${target}${ext}" | |
cp -- "$src_file" "$new_name" | |
echo "Renamed: $src_file -> $new_name" | |
} | |
SOURCE_TYPE=$(cat downloads/.lock.json | jq -M -c -r '."${{ matrix.source }}".source_type' | |
if [ "$SOURCE_TYPE" = "archive" ]; then | |
rename_file $(cat downloads/.lock.json | jq -M -c -r '."${{ matrix.source }}".filename') ${{ matrix.source }}-spc-mirror | |
else | |
cd downloads | |
tar -cJvf ${{ matrix.source }}-spc-mirror.txz $(cat downloads/.lock.json | jq -M -c -r '."${{ matrix.source }}".dirname') | |
cd .. | |
fi | |
- name: "Deploy to OSS" | |
uses: shallwefootball/s3-upload-action@master | |
with: | |
aws_key_id: ${{ secrets.AWS_KEY_ID }} | |
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws_bucket: ${{ secrets.AWS_BUCKET }} | |
source_dir: downloads/${{ matrix.source }}-spc-mirror.txz | |
destination_dir: static-php-cli/deps/spc-download-mirror/ | |
endpoint: ${{ secrets.AWS_ENDPOINT }} |