diff --git a/.github/container/Dockerfile b/.github/container/Dockerfile index ed0dfe504..7b502f2c4 100644 --- a/.github/container/Dockerfile +++ b/.github/container/Dockerfile @@ -1,20 +1,22 @@ #' Define default build variables -## specifc ARGs for METHOD='direct' ARG OTP_VSN='27.2' ARG ELIXIR_VSN='1.18.1' -## specifc ARGs for METHOD='package' -ARG ALPINE_VSN='3.19' -## general ARGs ARG UID='9000' ARG USER='ejabberd' ARG HOME="opt/$USER" -ARG METHOD='direct' ARG BUILD_DIR="/$USER" ARG VERSION='master' ################################################################################ -#' METHOD='direct' - build and install ejabberd directly from source -FROM docker.io/erlang:${OTP_VSN}-alpine AS direct +#' Compile ejabberdapi +FROM docker.io/golang:1.23-alpine AS api +RUN go install -v \ + github.com/processone/ejabberd-api/cmd/ejabberd@master \ + && mv bin/ejabberd bin/ejabberdapi + +################################################################################ +#' build and install ejabberd directly from source +FROM docker.io/erlang:${OTP_VSN}-alpine AS ejabberd RUN apk -U add --no-cache \ autoconf \ @@ -70,37 +72,16 @@ RUN find "$HOME-$VERSION/bin" -name 'ejabberd' -delete \ RUN wget -O "$HOME/conf/cacert.pem" 'https://curl.se/ca/cacert.pem' -################################################################################ -#' METHOD='package' - install ejabberd from binary tarball package -FROM docker.io/alpine:${ALPINE_VSN} AS package -COPY tarballs/ejabberd-*-linux-musl-*.tar.gz /tmp/ -WORKDIR /rootfs -ARG HOME -RUN home_root_dir=$(echo $HOME | sed 's|\(.*\)/.*|\1 |') \ - && mkdir -p $home_root_dir \ - && ARCH=$(uname -m | sed -e 's/x86_64/x64/;s/aarch64/arm64/') \ - && tar -xzf /tmp/ejabberd-*-linux-musl-$ARCH.tar.gz -C $home_root_dir - -################################################################################ -#' Compile ejabberdapi -FROM docker.io/golang:1.23-alpine AS api -RUN go install -v \ - github.com/processone/ejabberd-api/cmd/ejabberd@master \ - && mv bin/ejabberd bin/ejabberdapi - -################################################################################ #' Prepare ejabberd for runtime -FROM ${METHOD} AS ejabberd RUN apk -U add --no-cache \ git \ libcap \ openssl -WORKDIR /rootfs -ARG HOME RUN mkdir -p usr/local/bin $HOME/conf $HOME/database $HOME/logs $HOME/upload -ARG BUILD_DIR +COPY --from=api /go/bin/ejabberdapi usr/local/bin/ + RUN if [ ! -d $HOME/.ejabberd-modules ]; \ then \ if [ -d $BUILD_DIR/.ejabberd-modules ]; \ @@ -162,31 +143,22 @@ RUN home_root_dir=$(echo $HOME | sed 's|\(.*\)/.*|\1 |') \ | sed -e "s|so:libc.so|so:libc.musl-$(uname -m).so.1|" \ > /tmp/runDeps -COPY --from=api /go/bin/ejabberdapi usr/local/bin/ - ARG UID RUN chown -R $UID:$UID $HOME -ARG VERSION RUN cp /rootfs/$HOME-$VERSION/lib/captcha*.sh usr/local/bin/ RUN mkdir $HOME/sql \ && find /rootfs/$HOME-$VERSION/lib/ -name *.sql -exec cp {} $HOME/sql \; -exec cp {} $HOME/database \; ################################################################################ -#' METHOD='direct' - Remove erlang/OTP & rebar3 -FROM docker.io/erlang:${OTP_VSN}-alpine AS runtime-direct +#' Remove erlang/OTP & rebar3 +FROM docker.io/erlang:${OTP_VSN}-alpine AS runtime RUN apk del .erlang-rundeps \ && rm -f $(which rebar3) \ && find /usr -type d -name 'erlang' -exec rm -rf {} + \ && find /usr -type l -exec test ! -e {} \; -delete -################################################################################ -#' METHOD='package' - define runtime base image -FROM docker.io/alpine:${ALPINE_VSN} AS runtime-package - -################################################################################ #' Update alpine, finalize runtime environment -FROM runtime-${METHOD} AS runtime COPY --from=ejabberd /tmp/runDeps /tmp/runDeps RUN apk -U upgrade --available --no-cache \ && apk add --no-cache \ @@ -210,7 +182,7 @@ RUN rm -rf /home \ ################################################################################ #' Build together production image -FROM scratch AS prod +FROM scratch ARG USER ARG HOME diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index 7940c9b68..567a2c845 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -1,8 +1,6 @@ name: Container on: - schedule: - - cron: '22 2 */6 * *' # every 6 days to avoid gha cache being evicted push: paths-ignore: - '.devcontainer/**' @@ -28,52 +26,6 @@ jobs: with: fetch-depth: 0 - - name: Cache build directory - uses: actions/cache@v4 - with: - path: ~/build/ - key: ${{runner.os}}-ctr-ct-ng-1.27.0 - - - name: Get erlang/OTP version for bootstrapping - run: | - echo "OTP_VSN=$(awk '/^otp_vsn=/ {{gsub(/[^0-9.rc-]/, ""); print}}' tools/make-binaries)" >> $GITHUB_ENV - echo "ELIXIR_VSN=$(awk '/^elixir_vsn=/ {{gsub(/[^0-9.]/, ""); print}}' tools/make-binaries)" >> $GITHUB_ENV - - - name: Install prerequisites - run: | - sudo apt-get -qq update - sudo apt-get -qq install makeself - # https://github.com/crosstool-ng/crosstool-ng/blob/master/testing/docker/ubuntu21.10/Dockerfile - sudo apt-get -qq install build-essential autoconf bison flex gawk - sudo apt-get -qq install help2man libncurses5-dev libtool libtool-bin - sudo apt-get -qq install python3-dev texinfo unzip - - - name: Install erlang/OTP - uses: erlef/setup-beam@v1 - with: - otp-version: ${{ env.OTP_VSN }} - elixir-version: ${{ env.ELIXIR_VSN }} - version-type: strict - - - name: Remove Elixir Matchers - run: | - echo "::remove-matcher owner=elixir-mixCompileWarning::" - echo "::remove-matcher owner=elixir-credoOutputDefault::" - echo "::remove-matcher owner=elixir-mixCompileError::" - echo "::remove-matcher owner=elixir-mixTestFailure::" - echo "::remove-matcher owner=elixir-dialyzerOutputDefault::" - - - name: Build musl-libc based binary archives - run: | - sed -i "s|targets='.*'|targets='x86_64-linux-musl aarch64-linux-musl'|" tools/make-binaries - mv .github/container/ejabberdctl.template . - CHECK_DEPS=false tools/make-binaries - - - name: Collect packages - run: | - mkdir tarballs - mv ejabberd-*.tar.gz tarballs - - name: Checkout ejabberd-contrib uses: actions/checkout@v4 with: @@ -111,7 +63,6 @@ jobs: uses: docker/build-push-action@v6 with: build-args: | - METHOD=package VERSION=${{ steps.gitdescribe.outputs.ver }} cache-from: type=gha cache-to: type=gha,mode=max