diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 885f863..99de3dd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,6 +24,7 @@ jobs: name: Setup, Build runs-on: ubuntu-latest continue-on-error: true + if : ${{ needs.detect-changes.outputs.image_variants != '[]' }} strategy: max-parallel: 6 # select a core set of images to build @@ -33,7 +34,31 @@ jobs: - name: Checkout uses: actions/checkout@v2 - # Build the Docker image + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build - run: | - docker build -f ${{ matrix.IMAGE_VARIANT }} . \ No newline at end of file + uses: docker/build-push-action@v5 + with: + context: . + file: ${{ matrix.IMAGE_VARIANT }} + tags: quota-microservices + push: false + load: true + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Extract built package + uses: shrink/actions-docker-extract@v3 + id: extract + with: + image: quota-microservices + path: /output/. + destination: output + + # Archive the built package + - name: Archive artifacts + uses: actions/upload-artifact@v4 + with: + name: compiled-artifacts + path: output \ No newline at end of file diff --git a/.github/workflows/periodic_build.yml b/.github/workflows/periodic_build.yml new file mode 100644 index 0000000..9dc40fb --- /dev/null +++ b/.github/workflows/periodic_build.yml @@ -0,0 +1,59 @@ +name: Periodically Build + +on: + schedule: + - cron: '0 0 * * 0' # At 00:00 every Sunday + + workflow_dispatch: + +jobs: + setup-build: + name: Setup, Build + runs-on: ubuntu-latest + continue-on-error: true + strategy: + max-parallel: 6 + # select a core set of images to build + matrix: + IMAGE_VARIANT: + - Dockerfile + # - Dockerfile-deb # don't build deb package for now + steps: + - name: Checkout + uses: actions/checkout@v2 + if: ${{ github.event.action }} != 'workflow_dispatch' + + - name: Checkout, ref = ${{ github.ref_name }} + uses: actions/checkout@v2 + if: ${{ github.event.action }} == 'workflow_dispatch' + with: + ref: ${{ github.ref_name }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build + uses: docker/build-push-action@v5 + with: + context: . + file: ${{ matrix.IMAGE_VARIANT }} + tags: quota-microservices + push: false + load: true + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Extract built package + uses: shrink/actions-docker-extract@v3 + id: extract + with: + image: quota-microservices + path: /output/. + destination: output + + # Archive the built package + - name: Archive artifacts + uses: actions/upload-artifact@v4 + with: + name: compiled-artifacts + path: output diff --git a/Dockerfile b/Dockerfile index 48f2f08..ba6419c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,44 +1,32 @@ -FROM centos:centos7.6.1810 -RUN yum -y install epel-release &&\ - yum makecache -y &&\ - yum clean all &&\ +FROM centos:centos7.6.1810 as builder +RUN yum makecache -y && \ + yum clean all&& \ yum update -y RUN yum install -y epel-release \ - yum-utils \ - emacs \ - vim-enhanced \ - expect \ - wget \ - git - -RUN yum install -y epel-release \ - pwgen \ - jq - -RUN rpm --import https://packages.irods.org/irods-signing-key.asc -RUN wget -qO - https://packages.irods.org/renci-irods.yum.repo | \ - tee /etc/yum.repos.d/renci-irods.yum.repo -RUN yum makecache -y fast &&\ + yum-utils \ + vim-enhanced \ + expect \ + wget \ + git +RUN yum install -y pwgen \ + jq +RUN rpm --import https://packages.irods.org/irods-signing-key.asc && \ + wget -qO - https://packages.irods.org/renci-irods.yum.repo | tee /etc/yum.repos.d/renci-irods.yum.repo +RUN yum makecache -y && \ yum group install -y "Development Tools" --setopt=group_package_types=mandatory,default,optional - -RUN yum install -y sudo python3 centos-release-scl -RUN yum install -y python36-distro devtoolset-10-gcc devtoolset-10-gcc-c++ -RUN yum install -y irods-externals-* -WORKDIR /opt -# https://github.com/irods/externals?tab=readme-ov-file#rhel--centos-7 -RUN git clone https://github.com/irods/externals.git &&\ - cd externals &&\ - ./install_prerequisites.py &&\ - scl enable devtoolset-10 bash -WORKDIR /opt/externals -RUN make +RUN yum install -y --skip-broken irods-externals-* RUN yum install -y openssl-devel libcurl-devel -RUN yum install -y irods-devel-4.2.11 - +RUN yum install -y irods-devel-4.2.11-1 COPY . /hydroshare-quota +# CMakeLists.txt must match iRODS version specified. This file is under version control +# cmake3.21 for iRODS 4.3.x +# cmake3.11.4-0 for iRODS 4.2.x +WORKDIR /hydroshare-quota/ +RUN /opt/irods-externals/cmake3.11.4-0/bin/cmake . 2>&1 | tee cmake.stdout +RUN cat cmake.stdout +RUN make package 2>&1 | tee make.stdout +# Investigate for Rocky/RHEL 9 +RUN mkdir /output && mv *.rpm /output/ -WORKDIR /hydroshare-quota -RUN /opt/externals/cmake3.11.4-0/bin/cmake . -RUN make package - -# save hydroshare-quota-microservices-centos7-x86_64.rpm \ No newline at end of file +FROM alpine +COPY --from=builder /output /output \ No newline at end of file diff --git a/Dockerfile-deb b/Dockerfile-deb index 021b40a..784ae38 100644 --- a/Dockerfile-deb +++ b/Dockerfile-deb @@ -1,4 +1,4 @@ -FROM debian:bullseye +FROM debian:bullseye as builder RUN apt-get update RUN apt-get install -y libcurl4-openssl-dev libssl-dev build-essential vim RUN apt-get install -y sudo git python3 python3-distro @@ -17,8 +17,11 @@ RUN git clone https://github.com/irods/externals.git &&\ make COPY . /hydroshare-quota -# vim CMakeLists.txt. # edit 4.3.1 -RUN /opt/irods-externals/cmake3.21.4-0/bin/cmake . +# CMakeLists.txt must match iRODS version specified. This file is under version control. +# cmake3.21 for iRODS 4.3.x +# cmake3.11.4-0 for iRODS 4.2.x +WORKDIR /hydroshare-quota +RUN /opt/externals/cmake3.11.4-0/bin/cmake . RUN mkdir -p DEBAIN && touch DEBIAN/control SHELL ["/bin/bash", "-c"] RUN echo $'Package: hydroshare-quota \n\ @@ -27,12 +30,15 @@ Maintainer: CUAHSI \n\ Architecture: all \n\ Description: hydroshare-quota' > DEBIAN/control -WORKDIR /hydroshare-quota RUN dpkg-deb --build hydroshare-quota +RUN mkdir /output && mv hydroshare-quota.deb /output/ # for local development: # docker cp hydroshare-quota.deb data.local.org:/root/ # cat <