wolfree-dockerfile/Dockerfile
2023-08-11 05:09:24 +00:00

172 lines
4.1 KiB
Docker

# syntax=docker/dockerfile:1
# SPDX-License-Identifier: AGPL-3.0-or-later
# This file is part of Wolfree.
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
FROM alpine
WORKDIR /app/
# Install all dependencies.
RUN \
apk add \
-- \
wget \
npm \
gcc \
rustup \
;
RUN \
rustup-init -y
COPY \
./docusaurus/package.json \
./docusaurus/package.json
RUN \
npm install \
--prefix ./docusaurus/ \
-- \
;
# WolframAlpha LLC prebuilt the website and kindly deployed it on the Internet.
# We can run Wget to download the web pages and save them as static pages.
RUN \
wget \
--directory-prefix=./docusaurus/static/ \
--no-host-directories \
--page-requisites \
--convert-links \
--no-verbose \
-- \
'https://www.wolframalpha.com/input/index.html' \
'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js' \
'https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.0.5/purify.min.js' \
; \
: \
;
RUN \
sed \
-e 's|.*js...static.chunks...........||' \
-e 's|"........js.....miniCssF.*|.js\n|' \
-e 's|:"|.|g' \
-e 's|",|.js\n|g' \
-- \
./docusaurus/static/_next/static/chunks/webpack-*.js \
| \
wget \
--directory-prefix=./docusaurus/static/ \
--no-host-directories \
--page-requisites \
--convert-links \
--no-verbose \
--input-file=- \
--base=https://www.wolframalpha.com/_next/static/chunks/ \
-- \
; \
: \
;
RUN \
sed \
-e 's|.*return.static.css.....||' \
-e 's|.........css.......function.*|.css\n|' \
-e 's|[0-9]*:"||g' \
-e 's|",|.css\n|g' \
-- \
./docusaurus/static/_next/static/chunks/webpack-*.js \
| \
wget \
--directory-prefix=./docusaurus/static/ \
--no-host-directories \
--page-requisites \
--convert-links \
--no-verbose \
--input-file=- \
--base=https://www.wolframalpha.com/_next/static/css/ \
-- \
; \
: \
;
# Delete unused large files on the static website.
RUN \
truncate \
-s 0 \
-- \
./docusaurus/static/_next/static/images/* \
;
# Build the Docusaurus static website.
COPY \
./docusaurus/ \
./docusaurus/
RUN \
npm run \
--prefix ./docusaurus/ \
-- \
build \
;
# Lint the source code and run the Rust program.
# The Rust program customizes the static pages.
COPY \
./rust/ \
./rust/
RUN \
PATH="$HOME/.cargo/bin:$PATH" \
cargo clippy \
--manifest-path ./rust/wolfree_libredirect_patch/Cargo.toml \
-- \
--warn clippy::all \
--warn clippy::cargo \
--warn clippy::nursery \
--warn clippy::pedantic \
--warn clippy::restriction \
;
RUN \
PATH="$HOME/.cargo/bin:$PATH" \
cargo clippy \
--manifest-path ./rust/wolfree_sed_in_place/Cargo.toml \
-- \
--warn clippy::all \
--warn clippy::cargo \
--warn clippy::nursery \
--warn clippy::pedantic \
--warn clippy::restriction \
;
# Optionally, customize Wolfree instances to suit LibRedirect.
# https://github.com/libredirect/browser_extension/issues/425
# To integrate Wolfree with LibRedirect, please delete the number sign at the beginning of the following line.
# RUN PATH="$HOME/.cargo/bin:$PATH" cargo run --manifest-path ./rust/wolfree_libredirect_patch/Cargo.toml -- ;
RUN PATH="$HOME/.cargo/bin:$PATH" cargo run --manifest-path ./rust/wolfree_sed_in_place/Cargo.toml -- ;
# Optimizing builds with cache management | Docker Documentation
# https://docs.docker.com/build/cache/
# Because a change causes a rebuild for steps that follow,
# try to make expensive steps appear near the beginning of the Dockerfile.
# Steps that change often should appear near the end of the Dockerfile to avoid triggering rebuilds of layers that haven't changed.
CMD \
npm run \
--prefix ./docusaurus/ \
-- \
serve \
--port 80 \
--host localhost \
;
EXPOSE 80