Run Docker buildx to compile app bundle.
docker buildx build -f build.Dockerfile --build-arg APP_KEY={APP_KEY} -o type=local,dest=dist --target=export .
Then upload app bundle {APP_KEY}.zip
to Fusion Portal with fdev.
FROM node:16-alpine as manifest | |
WORKDIR /build | |
COPY package.json ./ | |
COPY create-manifest.js ./ | |
RUN node create-manifest.js > 'app-manifest.json' | |
FROM node:16-alpine as base | |
WORKDIR /build | |
COPY package*.json ./ | |
COPY app-icon.png ./ | |
COPY app-icon.svg ./ | |
COPY app.config.js ./ | |
COPY src ./src | |
RUN npm ci | |
RUN npm run build | |
FROM node:16-alpine as bundle | |
ARG APP_KEY | |
WORKDIR /bundle | |
RUN apk --no-cache add zip | |
COPY --from=manifest /build/app-manifest.json ./ | |
COPY --from=base /build/app-icon.svg ./ | |
COPY --from=base /build/dist/app-bundle.js ./ | |
RUN zip ${APP_KEY}.zip app-manifest.json app-bundle.js app-icon.svg | |
FROM scratch as export | |
COPY --from=bundle /bundle . |
import * as path from 'path'; | |
import { createRequire } from "module"; | |
const require = createRequire(import.meta.url); | |
const pkg = require("./package.json"); | |
const parseVersion = (version) => { | |
const parts = version.split('.'); | |
return { | |
major: parts[0], | |
minor: parts[1], | |
patch: parts[2], | |
}; | |
} | |
const key = [pkg.name].filter(x => !!x).join('-'); | |
const manifest = { | |
key, | |
name: key, | |
shortName: key, | |
description: pkg.description, | |
main: pkg.main, | |
version: parseVersion(pkg.version), | |
icon: '' | |
} | |
console.log(JSON.stringify(manifest, null, 2)) |