diff --git a/.github/workflows/base.yaml b/.github/workflows/base.yaml new file mode 100644 index 000000000..8507b7119 --- /dev/null +++ b/.github/workflows/base.yaml @@ -0,0 +1,17 @@ +name: "Build Base" +on: + workflow_dispatch: + inputs: + debug_enabled: + type: boolean + description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' + required: false + default: false + +jobs: + build: + uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.6 + secrets: inherit + with: + platforms: "linux/amd64" + target: hyku-base diff --git a/.github/workflows/build-test-lint.yaml b/.github/workflows/build-test-lint.yaml index 980731811..9cedcedcf 100644 --- a/.github/workflows/build-test-lint.yaml +++ b/.github/workflows/build-test-lint.yaml @@ -20,6 +20,6 @@ jobs: secrets: inherit with: platforms: "linux/amd64" - target: hyku-base + target: hyku-web worker: true workerTarget: hyku-worker diff --git a/.gitignore b/.gitignore index 83b37be05..da50063b3 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ pg_upgrade_*.log rerun.txt pickle-email-*.html solr_db_initialized +fits.log ## Environment normalization: /.bundle @@ -49,6 +50,7 @@ config/environments/*.local.yml # Avatars and such public/uploads +/public/branding .env.* docker-compose.override.yml *~undo-tree~ diff --git a/Dockerfile b/Dockerfile index f40b5214b..c0496ad7d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,37 +1,100 @@ -ARG HYRAX_IMAGE_VERSION=3.1.0 +ARG HYRAX_IMAGE_VERSION=v4.0.0.beta2 FROM ghcr.io/samvera/hyrax/hyrax-base:$HYRAX_IMAGE_VERSION as hyku-base USER root -ARG EXTRA_APK_PACKAGES="openjdk11-jre ffmpeg" RUN apk --no-cache upgrade && \ apk --no-cache add \ + bash \ + cmake \ + exiftool \ + ffmpeg \ + git \ + imagemagick \ + less \ libreoffice \ + libreoffice-lang-uk \ libxml2-dev \ mediainfo \ + nodejs \ + openjdk17-jre \ + openjpeg-dev \ + openjpeg-tools \ perl \ + poppler \ + poppler-utils \ postgresql-client \ - $EXTRA_APK_PACKAGES + rsync \ + screen \ + tesseract-ocr \ + vim \ + yarn \ + && \ + # curl https://sh.rustup.rs -sSf | sh -s -- -y && \ + # source "$HOME/.cargo/env" && \ + # cargo install rbspy && \ + echo "******** Packages Installed *********" + +RUN wget https://github.com/ImageMagick/ImageMagick/archive/refs/tags/7.1.0-57.tar.gz \ + && tar xf 7.1.0-57.tar.gz \ + && apk --no-cache add \ + libjpeg-turbo openjpeg libpng tiff librsvg libgsf libimagequant poppler-qt5-dev \ + && cd ImageMagick* \ + && ./configure \ + && make install \ + && cd $OLDPWD \ + && rm -rf ImageMagick* \ + && rm -rf /var/cache/apk/* + +ARG VIPS_VERSION=8.11.3 + +RUN set -x -o pipefail \ + && wget -O- https://github.com/libvips/libvips/releases/download/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.gz | tar xzC /tmp \ + && apk --no-cache add \ + libjpeg-turbo openjpeg libpng tiff librsvg libgsf libimagequant poppler-qt5-dev \ + && apk add --virtual vips-dependencies build-base \ + libjpeg-turbo-dev libpng-dev tiff-dev librsvg-dev libgsf-dev libimagequant-dev \ + && cd /tmp/vips-${VIPS_VERSION} \ + && ./configure --prefix=/usr \ + --disable-static \ + --disable-dependency-tracking \ + --enable-silent-rules \ + && make -s install-strip \ + && cd $OLDPWD \ + && rm -rf /tmp/vips-${VIPS_VERSION} \ + && apk del --purge vips-dependencies \ + && rm -rf /var/cache/apk/* + USER app RUN mkdir -p /app/fits && \ cd /app/fits && \ - wget https://github.com/harvard-lts/fits/releases/download/1.5.0/fits-1.5.0.zip -O fits.zip && \ + wget https://github.com/harvard-lts/fits/releases/download/1.5.5/fits-1.5.5.zip -O fits.zip && \ unzip fits.zip && \ rm fits.zip && \ chmod a+x /app/fits/fits.sh ENV PATH="${PATH}:/app/fits" +# Change the order so exif tool is better positioned and use the biggest size if more than one +# size exists in an image file (pyramidal tifs mostly) +COPY --chown=1001:101 ./ops/fits.xml /app/fits/xml/fits.xml +COPY --chown=1001:101 ./ops/exiftool_image_to_fits.xslt /app/fits/xml/exiftool/exiftool_image_to_fits.xslt +RUN ln -sf /usr/lib/libmediainfo.so.0 /app/fits/tools/mediainfo/linux/libmediainfo.so.0 && \ + ln -sf /usr/lib/libzen.so.0 /app/fits/tools/mediainfo/linux/libzen.so.0 + +FROM hyku-base as hyku-web COPY --chown=1001:101 $APP_PATH/Gemfile* /app/samvera/hyrax-webapp/ -RUN bundle install --jobs "$(nproc)" +RUN sh -l -c " \ + bundle install --jobs "$(nproc)" && \ + sed -i '/require .enumerator./d' /usr/local/bundle/gems/oai-1.1.0/lib/oai/provider/resumption_token.rb && \ + sed -i '/require .enumerator./d' /usr/local/bundle/gems/edtf-3.0.8/lib/edtf.rb && \ + sed -i '/require .enumerator./d' /usr/local/bundle/gems/csl-1.6.0/lib/csl.rb" COPY --chown=1001:101 $APP_PATH/bin/db-migrate-seed.sh /app/samvera/ - COPY --chown=1001:101 $APP_PATH /app/samvera/hyrax-webapp RUN RAILS_ENV=production SECRET_KEY_BASE=`bin/rake secret` DB_ADAPTER=nulldb DB_URL='postgresql://fake' bundle exec rake assets:precompile - CMD ./bin/web -FROM hyku-base as hyku-worker +FROM hyku-web as hyku-worker ENV MALLOC_ARENA_MAX=2 CMD ./bin/worker diff --git a/docker-compose.yml b/docker-compose.yml index 726df7455..7787d7dec 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,9 +3,10 @@ version: '3.8' x-app: &app build: context: . - target: hyku-base - args: - - EXTRA_APK_PACKAGES=less vim bash openjdk11-jre ffmpeg rsync + target: hyku-web + cache_from: + - ghcr.io/samvera/hyku/base:${TAG:-latest} + - ghcr.io/samvera/hyku:${TAG:-latest} image: ghcr.io/samvera/hyku:${TAG:-latest} env_file: - .env @@ -121,6 +122,14 @@ services: networks: internal: + # Used exclusively for building and caching the base image to reduce build times + base: + <<: *app + image: ghcr.io/samvera/hyku/base:${TAG:-latest} + build: + context: . + target: hyku-base + web: <<: *app environment: @@ -145,18 +154,18 @@ services: condition: service_started initialize_app: condition: service_completed_successfully - expose: - 3000 worker: <<: *app - image: ghcr.io/samvera/hyku/worker:latest + image: ghcr.io/samvera/hyku/worker:${TAG:-latest} build: context: . target: hyku-worker - args: - - EXTRA_APK_PACKAGES=less vim bash openjdk11-jre ffmpeg rsync + cache_from: + - ghcr.io/samvera/hyku:${TAG:-latest} + - ghcr.io/samvera/hyku/worker:${TAG:-latest} command: bundle exec sidekiq depends_on: check_volumes: diff --git a/ops/exiftool_image_to_fits.xslt b/ops/exiftool_image_to_fits.xslt new file mode 100644 index 000000000..c92af0972 --- /dev/null +++ b/ops/exiftool_image_to_fits.xslt @@ -0,0 +1,790 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ops/fits.xml b/ops/fits.xml new file mode 100644 index 000000000..83972d530 --- /dev/null +++ b/ops/fits.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + false + true + false + xml/fits_output.xsd + http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd + http://hul.harvard.edu/ois/xml/ns/fits/fits_output + true + true + + + + + + + + + 20 + + + + DROID_SignatureFile_V94_Alt.xml + + + + +