mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-10-31 14:46:53 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			169 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| name: Docker
 | |
| 
 | |
| on:
 | |
|   push:
 | |
|     branches:
 | |
|       - main
 | |
|   release:
 | |
|     types:
 | |
|       - published
 | |
| 
 | |
| env:
 | |
|   REGISTRY: ghcr.io
 | |
|   IMAGE_NAME: ${{ github.repository }}
 | |
| 
 | |
| jobs:
 | |
|   build-php-base:
 | |
|     name: Build PHP base image on ${{ matrix.os }}
 | |
|     runs-on: ${{ matrix.os }}
 | |
|     permissions:
 | |
|       contents: read
 | |
|       packages: write
 | |
|     strategy:
 | |
|       fail-fast: false
 | |
|       matrix:
 | |
|         include:
 | |
|           - os: ubuntu-24.04
 | |
|             arch: amd64
 | |
|             platform: linux/amd64
 | |
|           - os: ubuntu-24.04-arm
 | |
|             arch: arm64
 | |
|             platform: linux/arm64
 | |
|     steps:
 | |
|       - name: Code checkout
 | |
|         uses: actions/checkout@v4
 | |
|       
 | |
|       - name: Setup Docker buildx
 | |
|         uses: docker/setup-buildx-action@v3
 | |
|       
 | |
|       - name: Build the base PHP image
 | |
|         uses: docker/build-push-action@v6
 | |
|         with:
 | |
|           context: .
 | |
|           file: ./Dockerfile.base
 | |
|           push: false
 | |
|           load: true
 | |
|           platforms: ${{ matrix.platform }}
 | |
|           tags: base-php:${{ matrix.arch }}
 | |
|           cache-from: type=gha,scope=base-php${{ matrix.arch }}
 | |
|           cache-to: type=gha,scope=base-php${{ matrix.arch }}
 | |
| 
 | |
|       - name: Export image to file
 | |
|         run: docker save -o base-php-${{ matrix.arch }}.tar base-php:${{ matrix.arch }}
 | |
|       
 | |
|       - name: Push the docker build to the artifacts
 | |
|         uses: actions/upload-artifact@v4
 | |
|         with:
 | |
|           name: base-php-${{ matrix.arch }}.tar
 | |
|           path: base-php-${{ matrix.arch }}.tar
 | |
|           retention-days: 7
 | |
| 
 | |
| 
 | |
|   build-and-push:
 | |
|     name: Build and Push ubuntu-24.04
 | |
|     runs-on: ubuntu-24.04
 | |
|     needs: build-php-base
 | |
|     permissions:
 | |
|       contents: read
 | |
|       packages: write
 | |
|     # Start a temp local registry because workflow can not pull from localy loaded images
 | |
|     services:
 | |
|       registry:
 | |
|         image: registry:2
 | |
|         ports:
 | |
|           - 5000:5000 
 | |
|     # Always run against a tag, even if the commit into the tag has [docker skip] within the commit message.
 | |
|     if: "!contains(github.ref, 'main') || (!contains(github.event.head_commit.message, 'skip docker') && !contains(github.event.head_commit.message, 'docker skip'))"
 | |
|     steps:
 | |
|       - name: Code checkout
 | |
|         uses: actions/checkout@v4
 | |
| 
 | |
|       - name: Docker metadata
 | |
|         id: docker_meta
 | |
|         uses: docker/metadata-action@v5
 | |
|         with:
 | |
|           images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
 | |
|           flavor: |
 | |
|             latest=false
 | |
|           tags: |
 | |
|             type=raw,value=latest,enable=${{ github.event_name == 'release' && github.event.action == 'published' && github.event.release.prerelease == false }}
 | |
|             type=ref,event=tag
 | |
|             type=ref,event=branch
 | |
| 
 | |
|       - name: Set up QEMU
 | |
|         uses: docker/setup-qemu-action@v3
 | |
|       
 | |
|       # We Need to start it in host mode else it can't acces the local registry on port 5000
 | |
|       - name: Setup Docker buildx
 | |
|         uses: docker/setup-buildx-action@v3
 | |
|         with:
 | |
|           driver-opts: network=host
 | |
| 
 | |
|       - name: Login to GitHub Container Registry
 | |
|         uses: docker/login-action@v3
 | |
|         with:
 | |
|           registry: ghcr.io
 | |
|           username: ${{ github.repository_owner }}
 | |
|           password: ${{ secrets.GITHUB_TOKEN }}
 | |
| 
 | |
|       - name: Get Build Information
 | |
|         id: build_info
 | |
|         run: |
 | |
|           echo "version_tag=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_OUTPUT
 | |
|           echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
 | |
| 
 | |
|         # Download the base PHP image AMD64
 | |
|       - uses: actions/download-artifact@v4
 | |
|         with:
 | |
|           name: base-php-amd64.tar
 | |
|         
 | |
|         # Download the base PHP image ARM64
 | |
|       - uses: actions/download-artifact@v4
 | |
|         with:
 | |
|           name: base-php-arm64.tar
 | |
| 
 | |
|       - name: Load base images into local registry
 | |
|         run: |
 | |
|           docker load -i base-php-amd64.tar
 | |
|           docker load -i base-php-arm64.tar
 | |
|           docker tag base-php:amd64 localhost:5000/base-php:amd64
 | |
|           docker tag base-php:arm64 localhost:5000/base-php:arm64
 | |
|           docker push localhost:5000/base-php:amd64
 | |
|           docker push localhost:5000/base-php:arm64
 | |
|           rm base-php-arm64.tar base-php-amd64.tar
 | |
|           
 | |
|       - name: Update version in config/app.php (tag)
 | |
|         if: "github.event_name == 'release' && github.event.action == 'published'"
 | |
|         run: |
 | |
|           sed -i "s/'version' => 'canary',/'version' => '${{ steps.build_info.outputs.version_tag }}',/" config/app.php
 | |
|               
 | |
|       - name: Build and Push (tag)
 | |
|         uses: docker/build-push-action@v6
 | |
|         if: "github.event_name == 'release' && github.event.action == 'published'"
 | |
|         with:
 | |
|           context: .
 | |
|           file: ./Dockerfile
 | |
|           push: true
 | |
|           platforms: 'linux/amd64,linux/arm64'
 | |
|           build-args: |
 | |
|             VERSION=${{ steps.build_info.outputs.version_tag }}
 | |
|           labels: ${{ steps.docker_meta.outputs.labels }}
 | |
|           tags: ${{ steps.docker_meta.outputs.tags }}
 | |
|           cache-from: type=gha,scope=tagged${{ matrix.os }}
 | |
|           cache-to: type=gha,scope=tagged${{ matrix.os }},mode=max
 | |
|         
 | |
|       - name: Build and Push (main)
 | |
|         uses: docker/build-push-action@v6
 | |
|         if: "github.event_name == 'push' && contains(github.ref, 'main')"
 | |
|         with:
 | |
|           context: .
 | |
|           file: ./Dockerfile
 | |
|           push: ${{ github.event_name != 'pull_request' }}
 | |
|           platforms: 'linux/amd64,linux/arm64'
 | |
|           build-args: |
 | |
|             VERSION=dev-${{ steps.build_info.outputs.short_sha }}
 | |
|           labels: ${{ steps.docker_meta.outputs.labels }}
 | |
|           tags: ${{ steps.docker_meta.outputs.tags }}
 | |
|           cache-from: type=gha,scope=${{ matrix.os }}
 | |
|           cache-to: type=gha,scope=${{ matrix.os }},mode=max
 | 
