habitica/.github/actions/build-container/action.yml
2025-08-30 16:35:13 +02:00

124 lines
5.3 KiB
YAML

name: Container
description: Action for building the containers for a given release version
inputs:
version:
required: true
description: "The version tag for which the containers should be built"
push_containers:
required: false
default: "true"
description: "Whether the containers should be pushed to the registry after build"
create_release:
required: false
default: "true"
description: "Whether a release should be created after building the containers"
registry_user:
required: true
description: "User name for the container registry"
registry_token:
required: true
description: "Access token for the container registry"
release_access_token:
required: true
description: "Access token used to create a release"
runs:
using: "composite"
steps:
- uses: actions/checkout@v4
if: inputs.create_release == 'true'
with:
ref: "releases/v${{ inputs.version }}"
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ inputs.registry_user }}
password: ${{ inputs.registry_token }}
- name: Determine major version
run: echo "version_major=$(echo ${{ inputs.version }} | cut -d. \-f1)" >> $GITHUB_OUTPUT
shell: bash
id: version_major
- name: Build and Push Server Develop
uses: docker/build-push-action@v6
if: inputs.create_release != 'true'
with:
target: server
platforms: linux/amd64
push: ${{ inputs.push_containers }}
tags: ${{ inputs.registry_user }}/habitica-server:${{ inputs.version }}
cache-from: type=registry,ref=${{ inputs.registry_user }}/habitica-server:buildcache
cache-to: type=registry,ref=${{ inputs.registry_user }}/habitica-server:buildcache,mode=max
- name: Build and Push Server Release
uses: docker/build-push-action@v6
if: inputs.create_release == 'true'
with:
target: server
platforms: linux/amd64,linux/arm64
push: ${{ inputs.push_containers }}
tags: ${{ inputs.registry_user }}/habitica-server:latest,${{ inputs.registry_user }}/habitica-server:${{ steps.version_major.outputs.version_major }},${{ inputs.registry_user }}/habitica-server:${{ inputs.version }}
cache-from: type=registry,ref=${{ inputs.registry_user }}/habitica-server:buildcache
cache-to: type=registry,ref=${{ inputs.registry_user }}/habitica-server:buildcache,mode=max
- name: Build and Push Client Develop
uses: docker/build-push-action@v6
if: inputs.create_release != 'true'
with:
target: client
platforms: linux/amd64
push: ${{ inputs.push_containers }}
tags: ${{ inputs.registry_user }}/habitica-client:${{ inputs.version }}
cache-from: type=registry,ref=${{ inputs.registry_user }}/habitica-server:buildcache
cache-to: type=registry,ref=${{ inputs.registry_user }}/habitica-server:buildcache,mode=max
- name: Build and Push Client Release
uses: docker/build-push-action@v6
if: inputs.create_release == 'true'
with:
target: client
platforms: linux/amd64,linux/arm64
push: ${{ inputs.push_containers }}
tags: ${{ inputs.registry_user }}/habitica-client:latest,${{ inputs.registry_user }}/habitica-client:${{ steps.version_major.outputs.version_major }},${{ inputs.registry_user }}/habitica-client:${{ inputs.version }}
cache-from: type=registry,ref=${{ inputs.registry_user }}/habitica-server:buildcache
cache-to: type=registry,ref=${{ inputs.registry_user }}/habitica-server:buildcache,mode=max
- name: Install zip
uses: montudor/action-zip@v1
- name: Create Release Archives
if: inputs.create_release == 'true'
run: |
mkdir -p artifacts
docker create --name server ${{ inputs.registry_user }}/habitica-server:${{ inputs.version }}
docker cp server:/var/lib/habitica artifacts/
pushd artifacts/habitica
zip -r ../../habitica-server-v${{ inputs.version }}.zip *
popd
cp habitica-server-v${{ inputs.version }}.zip habitica-server-latest.zip
docker create --name client ${{ inputs.registry_user }}/habitica-client:${{ inputs.version }}
docker cp client:/var/www artifacts/
pushd artifacts/www
zip -r ../../habitica-client-v${{ inputs.version }}.zip *
popd
cp habitica-client-v${{ inputs.version }}.zip habitica-client-latest.zip
shell: bash
- name: Create release (latest)
if: inputs.create_release == 'true'
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ inputs.release_access_token }}"
prerelease: false
automatic_release_tag: "latest"
files: |
habitica-server-latest.zip
habitica-client-latest.zip
- name: Create release (version)
if: inputs.create_release == 'true'
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ inputs.release_access_token }}"
prerelease: false
automatic_release_tag: "v${{ inputs.version }}"
files: |
habitica-server-v${{ inputs.version }}.zip
habitica-client-v${{ inputs.version }}.zip