mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-04-14 11:46:23 +00:00
124 lines
5.3 KiB
YAML
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
|