-
Notifications
You must be signed in to change notification settings - Fork 8
143 lines (114 loc) · 4.11 KB
/
Copy pathphp.yml
File metadata and controls
143 lines (114 loc) · 4.11 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 PHAR and upload to release
on:
workflow_dispatch:
inputs:
tag:
description: 'Tag to use ( example : v1.2.3 ) If empty, workflow will try to detect tag from event'
required: false
default: ''
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
env:
PHP_VERSION: '8.4'
PHAR_TARGET_BASENAME: liveproto.phar
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@2.32.0
with:
php-version: ${{ env.PHP_VERSION }}
extensions: mbstring, gmp
coverage: none
- name: Install dependencies
run: composer install --prefer-dist --no-progress --working-dir=.github
- name: Resolve TAG
id: resolve
env:
INPUT_TAG: ${{ github.event.inputs.tag }}
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_REF: ${{ github.ref }}
GITHUB_RELEASE_TAG: ${{ github.event.release.tag_name || '' }}
run: |
echo "Event: $GITHUB_EVENT_NAME"
# 1) If input.tag provided on manual run, prefer that
if [ -n "$INPUT_TAG" ]; then
TAG="$INPUT_TAG"
source="workflow_dispatch input"
# 2) If this was a release event, use the release tag
elif [ "$GITHUB_EVENT_NAME" = "release" ] && [ -n "$GITHUB_RELEASE_TAG" ]; then
TAG="$GITHUB_RELEASE_TAG"
source="release event"
# 3) If this was a tag push, extract tag from GITHUB_REF ( refs/tags/... )
elif [[ "$GITHUB_REF" == refs/tags/* ]]; then
TAG="${GITHUB_REF#refs/tags/}"
source="push tag"
else
echo "No tag could be determined automatically, Provide a tag with workflow_dispatch input 'tag' or trigger via a release / tag push"
exit 1
fi
echo "Resolved TAG=$TAG (from $source)"
echo "TAG=$TAG" >> $GITHUB_ENV
- name: Set VERSION
id: set-version
run: |
TAG='${{ env.TAG }}'
VERSION="${TAG#v}"
VERSION="${VERSION#V}"
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Build PHAR
env:
VERSION: ${{ env.VERSION }}
PHAR_NAME: ${{ env.PHAR_TARGET_BASENAME }}
run: |
set -euo pipefail
if [ -z "${VERSION:-}" ]; then
echo "VERSION is empty — cannot continue"
exit 1
fi
OUT_DIR="v/$VERSION"
OUT_PATH="$OUT_DIR/$PHAR_NAME"
mkdir -p "$OUT_DIR"
rm -f "$OUT_PATH"
cat > build-phar.php <<'PHP'
<?php
$out = $argv[true];
$phar = new Phar($out);
$phar->startBuffering();
$phar->buildFromDirectory('.github/vendor');
$stub = $phar->createDefaultStub('autoload.php');
$phar->setStub($stub);
$phar->stopBuffering();
echo "PHAR created at $out\n";
PHP
php -d phar.readonly=0 build-phar.php "$OUT_PATH"
- name: Verify PHAR exists
run: |
ls -l "v/${{ env.VERSION }}/${{ env.PHAR_TARGET_BASENAME }}"
file "v/${{ env.VERSION }}/${{ env.PHAR_TARGET_BASENAME }}" || true
- name: Upload PHAR to the Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: softprops/action-gh-release@v2.2.1
with:
tag_name: ${{ env.TAG }}
files: v/${{ env.VERSION }}/${{ env.PHAR_TARGET_BASENAME }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.6.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.11.1
- name: Login Docker
uses: docker/login-action@v3.6.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build & Push Docker
uses: docker/build-push-action@v6.18.0
with:
push: true
tags: |
docker.io/${{ secrets.DOCKERHUB_USERNAME }}/liveproto:latest