2222 - development # Development environment
2323 release :
2424 types : [published] # Production deployment trigger
25+
26+ permissions :
27+ id-token : write
28+ contents : read
29+
2530jobs :
2631 # Create release when pushing to main
2732 create-release :
2833 runs-on : ubuntu-latest
34+ permissions :
35+ contents : write
2936 if : " github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, '[skip deploy]') && !contains(github.event.head_commit.message, '[no deploy]')"
3037 outputs :
3138 release-tag : ${{ steps.create_release.outputs.tag_name }}
8996 MINOR=${BASH_REMATCH[2]}
9097 PATCH=${BASH_REMATCH[3]}
9198 else
92- echo "Error: Could not parse version $CURRENT"
93- exit 1
99+ MAJOR=0
100+ MINOR=0
101+ PATCH=0
94102 fi
95103
96104 # Increment based on bump type
@@ -162,17 +170,18 @@ jobs:
162170 - name : Get Runner IP
163171 id : ip
164172 uses : haythem/public-ip@v1.3
173+ - name : Configure AWS Credentials
174+ uses : aws-actions/configure-aws-credentials@v4
175+ with :
176+ role-to-assume : arn:aws:iam::147899039648:role/GitHubActionsDeployRole
177+ aws-region : ${{ secrets.AWS_REGION }}
165178 - name : Whitelist Runner IP in AWS Security Group
166179 run : |
167180 aws ec2 authorize-security-group-ingress \
168181 --group-id ${{ secrets.AWS_SECURITY_GROUP_ID }} \
169182 --protocol tcp \
170183 --port 22 \
171184 --cidr ${{ steps.ip.outputs.ipv4 }}/32
172- env :
173- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
174- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
175- AWS_DEFAULT_REGION : ${{ secrets.AWS_REGION }}
176185 - name : Setup PHP
177186 uses : shivammathur/setup-php@v2
178187 with :
@@ -205,9 +214,23 @@ jobs:
205214 run : npm run production
206215 - name : Create deployment package
207216 run : |
208- mkdir -p deployment-package
209- rsync -av --exclude=node_modules --exclude=.git --exclude=.github --exclude=tests --exclude=storage/logs --exclude=vendor . deployment-package/
210- cp -r public/css public/js public/fonts public/images public/svg public/mix-manifest.json deployment-package/public/ || true
217+ # Clean any prior
218+ rm -rf deployment-package || true
219+ # Create isolated temp dir
220+ TEMP_DIR=$(mktemp -d)
221+ # Sync repo files to temp
222+ rsync -av \
223+ --exclude=node_modules \
224+ --exclude=.git \
225+ --exclude=.github \
226+ --exclude=tests \
227+ --exclude=storage/logs \
228+ --exclude=vendor \
229+ . "$TEMP_DIR/"
230+ # Copy assets into temp/public/
231+ cp -r public/css public/js public/fonts public/images public/svg public/mix-manifest.json "$TEMP_DIR/public/" || true
232+ # Move to package name
233+ mv "$TEMP_DIR" deployment-package
211234 - name : Upload deployment artifact
212235 uses : actions/upload-artifact@v4
213236 with :
@@ -232,10 +255,6 @@ jobs:
232255 --protocol tcp \
233256 --port 22 \
234257 --cidr ${{ steps.ip.outputs.ipv4 }}/32
235- env :
236- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
237- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
238- AWS_DEFAULT_REGION : ${{ secrets.AWS_REGION }}
239258
240259 build-and-deploy-development :
241260 runs-on : ubuntu-latest
@@ -247,17 +266,18 @@ jobs:
247266 - name : Get Runner IP
248267 id : ip
249268 uses : haythem/public-ip@v1.3
269+ - name : Configure AWS Credentials
270+ uses : aws-actions/configure-aws-credentials@v4
271+ with :
272+ role-to-assume : arn:aws:iam::147899039648:role/GitHubActionsDeployRole
273+ aws-region : ${{ secrets.AWS_REGION }}
250274 - name : Whitelist Runner IP in AWS Security Group
251275 run : |
252276 aws ec2 authorize-security-group-ingress \
253277 --group-id ${{ secrets.AWS_SECURITY_GROUP_ID }} \
254278 --protocol tcp \
255279 --port 22 \
256280 --cidr ${{ steps.ip.outputs.ipv4 }}/32
257- env :
258- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
259- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
260- AWS_DEFAULT_REGION : ${{ secrets.AWS_REGION }}
261281 - name : Setup PHP
262282 uses : shivammathur/setup-php@v2
263283 with :
@@ -290,9 +310,23 @@ jobs:
290310 run : npm run production
291311 - name : Create deployment package
292312 run : |
293- mkdir -p deployment-package
294- rsync -av --exclude=node_modules --exclude=.git --exclude=.github --exclude=tests --exclude=storage/logs --exclude=vendor . deployment-package/
295- cp -r public/css public/js public/fonts public/images public/svg public/mix-manifest.json deployment-package/public/ || true
313+ # Clean any prior
314+ rm -rf deployment-package || true
315+ # Create isolated temp dir
316+ TEMP_DIR=$(mktemp -d)
317+ # Sync repo files to temp
318+ rsync -av \
319+ --exclude=node_modules \
320+ --exclude=.git \
321+ --exclude=.github \
322+ --exclude=tests \
323+ --exclude=storage/logs \
324+ --exclude=vendor \
325+ . "$TEMP_DIR/"
326+ # Copy assets into temp/public/
327+ cp -r public/css public/js public/fonts public/images public/svg public/mix-manifest.json "$TEMP_DIR/public/" || true
328+ # Move to package name
329+ mv "$TEMP_DIR" deployment-package
296330 - name : Upload deployment artifact
297331 uses : actions/upload-artifact@v4
298332 with :
@@ -315,8 +349,4 @@ jobs:
315349 --group-id ${{ secrets.AWS_SECURITY_GROUP_ID }} \
316350 --protocol tcp \
317351 --port 22 \
318- --cidr ${{ steps.ip.outputs.ipv4 }}/32
319- env :
320- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
321- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
322- AWS_DEFAULT_REGION : ${{ secrets.AWS_REGION }}
352+ --cidr ${{ steps.ip.outputs.ipv4 }}/32
0 commit comments