.github/actions/build-docker-image/action.yml
name: 'Build Docker image'
description: 'Build Rocket.Chat Docker image'
inputs:
root-dir:
required: true
docker-tag:
required: true
release:
required: true
username:
required: false
password:
required: false
outputs:
image-name:
value: ${{ steps.build-image.outputs.image-name }}
runs:
using: composite
steps:
# - shell: bash
# name: Free disk space
# run: |
# sudo swapoff -a
# sudo rm -f /swapfile
# sudo apt clean
# docker rmi $(docker image ls -aq)
# df -h
- shell: bash
id: build-image
run: |
cd ${{ inputs.root-dir }}
LOWERCASE_REPOSITORY=$(echo "${{ github.repository_owner }}" | tr "[:upper:]" "[:lower:]")
IMAGE_NAME_BASE="ghcr.io/${LOWERCASE_REPOSITORY}/rocket.chat:${{ inputs.docker-tag }}"
IMAGE_NAME="${IMAGE_NAME_BASE}.${{ inputs.release }}"
echo "Build Docker image ${IMAGE_NAME}"
DOCKER_PATH="${GITHUB_WORKSPACE}/apps/meteor/.docker"
if [[ '${{ inputs.release }}' = 'preview' ]]; then
DOCKER_PATH="${DOCKER_PATH}-mongo"
fi;
DOCKERFILE_PATH="${DOCKER_PATH}/Dockerfile"
if [[ '${{ inputs.release }}' = 'alpine' ]]; then
DOCKERFILE_PATH="${DOCKERFILE_PATH}.${{ inputs.release }}"
fi;
echo "Copy Dockerfile for release: ${{ inputs.release }}"
cp $DOCKERFILE_PATH ./Dockerfile
if [ -e ${DOCKER_PATH}/entrypoint.sh ]; then
cp ${DOCKER_PATH}/entrypoint.sh .
fi;
echo "Build ${{ inputs.release }} Docker image"
docker build -t $IMAGE_NAME .
echo "image-name-base=${IMAGE_NAME_BASE}" >> $GITHUB_OUTPUT
echo "image-name=${IMAGE_NAME}" >> $GITHUB_OUTPUT
- name: Login to GitHub Container Registry
if: github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'release' || github.ref == 'refs/heads/develop'
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ inputs.username }}
password: ${{ inputs.password }}
- name: Publish image
shell: bash
if: github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'release' || github.ref == 'refs/heads/develop'
run: |
echo "Push Docker image: ${{ steps.build-image.outputs.image-name }}"
docker push ${{ steps.build-image.outputs.image-name }}
if [[ '${{ inputs.release }}' = 'official' ]]; then
echo "Push release official without variant"
docker tag ${{ steps.build-image.outputs.image-name }} ${{ steps.build-image.outputs.image-name-base }}
docker push ${{ steps.build-image.outputs.image-name-base }}
fi;