-
Notifications
You must be signed in to change notification settings - Fork 0
143 lines (120 loc) · 5.81 KB
/
build.yml
File metadata and controls
143 lines (120 loc) · 5.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
name: Build gRPC and Protobuf PHP Extensions
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
grpc_version:
description: 'gRPC version to build'
required: true
default: '1.78.0'
env:
GRPC_VERSION: ${{ github.event.inputs.grpc_version || '1.78.0' }}
jobs:
build-linux-x86_64:
runs-on: ubuntu-latest
strategy:
matrix:
php_version: ['8.0', '8.1', '8.2', '8.3', '8.4', '8.5']
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build gRPC and Protobuf extensions
run: |
docker run --rm \
--platform linux/amd64 \
-v $PWD:/output \
php:${{ matrix.php_version }}-cli \
bash -c "
apt-get update && apt-get install -y git build-essential autoconf zlib1g-dev
# Install gRPC and Protobuf
pecl install grpc-${GRPC_VERSION}
pecl install protobuf
# Copy the built extensions
PHP_EXT_DIR=\$(php-config --extension-dir)
cp \$PHP_EXT_DIR/grpc.so /output/grpc-php${{ matrix.php_version }}-linux-x86_64.so
cp \$PHP_EXT_DIR/protobuf.so /output/protobuf-php${{ matrix.php_version }}-linux-x86_64.so
# Get protobuf version
PROTOBUF_VERSION=\$(php -r \"echo phpversion('protobuf');\" -dextension=protobuf.so)
# Create metadata for gRPC
echo \"PHP Version: ${{ matrix.php_version }}\" > /output/grpc-php${{ matrix.php_version }}-linux-x86_64.txt
echo \"gRPC Version: ${GRPC_VERSION}\" >> /output/grpc-php${{ matrix.php_version }}-linux-x86_64.txt
echo \"Platform: Linux x86_64\" >> /output/grpc-php${{ matrix.php_version }}-linux-x86_64.txt
echo \"Build Date: \$(date -u)\" >> /output/grpc-php${{ matrix.php_version }}-linux-x86_64.txt
# Create metadata for Protobuf
echo \"PHP Version: ${{ matrix.php_version }}\" > /output/protobuf-php${{ matrix.php_version }}-linux-x86_64.txt
echo \"Protobuf Version: \$PROTOBUF_VERSION\" >> /output/protobuf-php${{ matrix.php_version }}-linux-x86_64.txt
echo \"Platform: Linux x86_64\" >> /output/protobuf-php${{ matrix.php_version }}-linux-x86_64.txt
echo \"Build Date: \$(date -u)\" >> /output/protobuf-php${{ matrix.php_version }}-linux-x86_64.txt
"
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: extensions-php${{ matrix.php_version }}-linux-x86_64
path: |
grpc-php${{ matrix.php_version }}-linux-x86_64.so
grpc-php${{ matrix.php_version }}-linux-x86_64.txt
protobuf-php${{ matrix.php_version }}-linux-x86_64.so
protobuf-php${{ matrix.php_version }}-linux-x86_64.txt
build-linux-aarch64:
runs-on: ubuntu-24.04-arm
strategy:
matrix:
php_version: ['8.0', '8.1', '8.2', '8.3', '8.4', '8.5']
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build gRPC and Protobuf extensions
run: |
docker run --rm \
--platform linux/arm64 \
-v $PWD:/output \
php:${{ matrix.php_version }}-cli \
bash -c "
apt-get update && apt-get install -y git build-essential autoconf zlib1g-dev
# Install gRPC and Protobuf
pecl install grpc-${GRPC_VERSION}
pecl install protobuf
# Copy the built extensions
PHP_EXT_DIR=\$(php-config --extension-dir)
cp \$PHP_EXT_DIR/grpc.so /output/grpc-php${{ matrix.php_version }}-linux-aarch64.so
cp \$PHP_EXT_DIR/protobuf.so /output/protobuf-php${{ matrix.php_version }}-linux-aarch64.so
# Get protobuf version
PROTOBUF_VERSION=\$(php -r \"echo phpversion('protobuf');\" -dextension=protobuf.so)
# Create metadata for gRPC
echo \"PHP Version: ${{ matrix.php_version }}\" > /output/grpc-php${{ matrix.php_version }}-linux-aarch64.txt
echo \"gRPC Version: ${GRPC_VERSION}\" >> /output/grpc-php${{ matrix.php_version }}-linux-aarch64.txt
echo \"Platform: Linux aarch64\" >> /output/grpc-php${{ matrix.php_version }}-linux-aarch64.txt
echo \"Build Date: \$(date -u)\" >> /output/grpc-php${{ matrix.php_version }}-linux-aarch64.txt
# Create metadata for Protobuf
echo \"PHP Version: ${{ matrix.php_version }}\" > /output/protobuf-php${{ matrix.php_version }}-linux-aarch64.txt
echo \"Protobuf Version: \$PROTOBUF_VERSION\" >> /output/protobuf-php${{ matrix.php_version }}-linux-aarch64.txt
echo \"Platform: Linux aarch64\" >> /output/protobuf-php${{ matrix.php_version }}-linux-aarch64.txt
echo \"Build Date: \$(date -u)\" >> /output/protobuf-php${{ matrix.php_version }}-linux-aarch64.txt
"
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: extensions-php${{ matrix.php_version }}-linux-aarch64
path: |
grpc-php${{ matrix.php_version }}-linux-aarch64.so
grpc-php${{ matrix.php_version }}-linux-aarch64.txt
protobuf-php${{ matrix.php_version }}-linux-aarch64.so
protobuf-php${{ matrix.php_version }}-linux-aarch64.txt
release:
needs: [build-linux-x86_64, build-linux-aarch64]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Create release
uses: softprops/action-gh-release@v1
with:
files: artifacts/**/*
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}