upend/Earthfile

169 lines
4.6 KiB
Plaintext

VERSION 0.7
appimage:
FROM --platform=linux/amd64 +base-rust
RUN apt-get update && \
apt-get -y install wget pipx binutils coreutils desktop-file-utils fakeroot fuse libgdk-pixbuf2.0-dev patchelf python3-pip python3-setuptools squashfs-tools strace util-linux zsync && \
pipx ensurepath && \
pipx install appimage-builder
COPY +upend-bin/upend AppDir/usr/bin/upend
COPY --dir +webui/dist AppDir/usr/share/upend/webui
COPY assets/upend.png AppDir/usr/share/icons/upend.png
COPY build/AppImageBuilder.yml .
RUN sed -e "s/latest/$(./AppDir/usr/bin/upend --version | cut -d ' ' -f 2)/" -i AppImageBuilder.yml
RUN pipx run appimage-builder
SAVE ARTIFACT UpEnd* AS LOCAL dist/
docker-minimal:
FROM debian:bookworm
RUN apt-get update && \
apt-get -y install libssl3 ca-certificates && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
DO +DOCKER_COMMON
ARG tag=trunk
SAVE IMAGE --push upend/upend:$tag-minimal
docker:
FROM debian:bookworm
RUN apt-get update && \
apt-get -y install --no-install-recommends ffmpeg wget libssl3 ca-certificates && \
wget https://github.com/bbc/audiowaveform/releases/download/1.8.1/audiowaveform_1.8.1-1-12_amd64.deb && \
apt-get -y install ./audiowaveform_1.8.1-1-12_amd64.deb && \
rm -v audiowaveform_1.8.1-1-12_amd64.deb && \
apt-get remove -y wget && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
DO +DOCKER_COMMON
ARG tag=trunk
SAVE IMAGE --push upend/upend:$tag
DOCKER_COMMON:
COMMAND
COPY +upend-bin/upend /usr/bin/upend
COPY --dir +webui/dist /usr/share/upend/webui
ENTRYPOINT ["/usr/bin/upend"]
CMD ["serve", "/vault", "--bind", "0.0.0.0:8093"]
EXPOSE 8093
ENV UPEND_NO_DESKTOP=true
ENV UPEND_ALLOW_HOST='*'
upend-bin:
FROM +base-rust
RUN cargo build --release
COPY +git-version/version.txt .
RUN UPEND_VERSION=$(cat version.txt) cargo build --release
SAVE ARTIFACT target/release/upend upend
webui:
FROM +base-node
COPY +jslib/jslib tools/upend_js
WORKDIR webui
RUN pnpm install --frozen-lockfile
RUN pnpm build
SAVE ARTIFACT dist
wasmlib:
FROM --platform=linux/amd64 +base-rust
WORKDIR tools/upend_wasm
RUN wasm-pack build --target web
SAVE ARTIFACT pkg
jslib:
FROM +base-node
WORKDIR tools/upend_js
RUN pnpm build
SAVE ARTIFACT . jslib
webext:
FROM +base-node
WORKDIR webext
RUN pnpm build
lint:
WAIT
BUILD +lint-backend
BUILD +lint-frontend
BUILD +lint-jslib
END
lint-backend:
FROM +base-rust
RUN cargo clippy --workspace
lint-frontend:
FROM +base-node
COPY +jslib/jslib tools/upend_js
WORKDIR webui
RUN pnpm install --frozen-lockfile
RUN pnpm check && pnpm lint
lint-jslib:
FROM +base-node
WORKDIR tools/upend_js
RUN pnpm lint
test:
WAIT
BUILD +test-backend
END
test-backend:
FROM +base-rust
RUN cargo nextest run --workspace
appimage-signed:
FROM alpine
RUN apk add gpg gpg-agent
RUN --secret GPG_SIGN_KEY echo "$GPG_SIGN_KEY" | gpg --import
COPY +appimage/*.AppImage .
RUN gpg --clear-sign *.AppImage
SAVE ARTIFACT *.AppImage
SAVE ARTIFACT *.asc
deploy-appimage-nightly:
FROM alpine
RUN apk add openssh-client
COPY +appimage-signed/* .
RUN --secret SSH_CONFIG --secret SSH_UPLOAD_KEY --secret SSH_KNOWN_HOSTS \
mkdir -p $HOME/.ssh && \
echo "$SSH_CONFIG" > $HOME/.ssh/config && \
echo "$SSH_UPLOAD_KEY" > $HOME/.ssh/id_rsa && \
echo "$SSH_KNOWN_HOSTS" > $HOME/.ssh/known_hosts && \
chmod 600 $HOME/.ssh/*
RUN scp -v *.AppImage *.asc mainsite:releases/nightly
git-version:
LOCALLY
RUN ./build/get_version.sh | tee /tmp/upend_version.txt
SAVE ARTIFACT /tmp/upend_version.txt version.txt
RUN rm /tmp/upend_version.txt
base-rust:
FROM rust:bookworm
RUN rustup component add clippy
RUN curl -LsSf https://get.nexte.st/latest/linux | tar zxf - -C /usr/local/cargo/bin
RUN cargo install wasm-pack wasm-bindgen-cli && rustup target add wasm32-unknown-unknown
WORKDIR /upend
COPY Cargo.toml Cargo.lock .
COPY base/Cargo.toml base/Cargo.toml
COPY cli/Cargo.toml cli/Cargo.toml
COPY db/Cargo.toml db/Cargo.toml
COPY tools/upend_wasm/Cargo.toml tools/upend_wasm/Cargo.toml
RUN cargo fetch --locked
COPY --dir base cli db Cargo.toml Cargo.lock .
COPY --dir tools/upend_wasm tools/
base-node:
FROM node:lts
RUN npm install -g pnpm
WORKDIR /upend
COPY +wasmlib/pkg tools/upend_wasm/pkg
COPY tools/upend_js/package.json tools/upend_js/pnpm-lock.yaml tools/upend_js/
RUN cd tools/upend_js && pnpm install --frozen-lockfile
COPY webui/package.json webui/pnpm-lock.yaml webui/
RUN cd webui && pnpm install --frozen-lockfile
COPY --dir webui webext .
COPY --dir tools/upend_js tools/