simplify build
This commit is contained in:
@@ -2,3 +2,5 @@
|
|||||||
dist
|
dist
|
||||||
node_modules
|
node_modules
|
||||||
redmine-reactions.pem
|
redmine-reactions.pem
|
||||||
|
build
|
||||||
|
output
|
||||||
|
|||||||
+25
-6
@@ -4,16 +4,35 @@ FROM node:20-alpine AS builder
|
|||||||
# Устанавливаем рабочую директорию внутри контейнера
|
# Устанавливаем рабочую директорию внутри контейнера
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
#ENV USER=docker
|
||||||
|
#ENV GROUPNAME=$USER
|
||||||
|
#ENV UID=1000
|
||||||
|
#ENV GID=1000
|
||||||
|
#
|
||||||
|
#RUN addgroup \
|
||||||
|
# --gid "$GID" \
|
||||||
|
# "$GROUPNAME" \
|
||||||
|
#&& adduser \
|
||||||
|
# --disabled-password \
|
||||||
|
# --gecos "" \
|
||||||
|
# --home "$(pwd)" \
|
||||||
|
# --ingroup "$GROUPNAME" \
|
||||||
|
# --no-create-home \
|
||||||
|
# --uid "$UID" \
|
||||||
|
# $USER
|
||||||
|
|
||||||
# Копируем сначала только package.json и package-lock.json (если есть)
|
# Копируем сначала только package.json и package-lock.json (если есть)
|
||||||
# Это ключевая оптимизация! Docker будет кэшировать этот слой, и npm install
|
# Это ключевая оптимизация! Docker будет кэшировать этот слой, и npm install
|
||||||
# не будет запускаться каждый раз, если зависимости не менялись.
|
# не будет запускаться каждый раз, если зависимости не менялись.
|
||||||
COPY package*.json ./
|
COPY --chown=node:node package*.json ./
|
||||||
RUN echo -e 'nameserver 1.1.1.1\noptions single-request-reopen' > /etc/resolv.conf && \
|
RUN chown node:node /app -R
|
||||||
cat /etc/resolv.conf && \
|
|
||||||
npm install --verbose
|
|
||||||
|
|
||||||
# Теперь копируем все остальные исходники
|
RUN echo -e 'nameserver 1.1.1.1\noptions single-request-reopen' > /etc/resolv.conf && \
|
||||||
COPY . .
|
su - node -c "cd /app && npm install"
|
||||||
|
|
||||||
|
USER node
|
||||||
|
|
||||||
|
COPY --chown=node:node . .
|
||||||
|
|
||||||
# Команда, которая будет выполняться по умолчанию для сборки проекта
|
# Команда, которая будет выполняться по умолчанию для сборки проекта
|
||||||
CMD ["npm", "run", "build"]
|
CMD ["npm", "run", "build"]
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
BUILD_DIR := build
|
||||||
|
DIST_DIR := $(BUILD_DIR)/dist
|
||||||
|
OUTPUT_DIR := output
|
||||||
|
|
||||||
|
CHROME_ZIP := $(OUTPUT_DIR)/chrome/redmine-reactions.zip
|
||||||
|
FIREFOX_XPI := $(OUTPUT_DIR)/firefox/redmine-reactions.xpi
|
||||||
|
|
||||||
|
DOCKER_COMPOSE_RUN := docker-compose run --rm builder
|
||||||
|
|
||||||
|
ifneq (,$(wildcard .env))
|
||||||
|
include .env
|
||||||
|
export AMO_JWT_ISSUER AMO_JWT_SECRET
|
||||||
|
endif
|
||||||
|
|
||||||
|
include .aibuild
|
||||||
|
BUILD := $(shell echo $$(($(BUILD) + 1)))
|
||||||
|
|
||||||
|
.PHONY: all chrome firefox clean
|
||||||
|
|
||||||
|
all: chrome firefox
|
||||||
|
|
||||||
|
chrome: build output builder aibuild
|
||||||
|
@echo "==> 🏗️ Building for Chrome..."
|
||||||
|
sed -e "s/AI_BUILD/$(BUILD)/" manifest-chrome.json > ./build/manifest.json
|
||||||
|
$(DOCKER_COMPOSE_RUN) npm run build
|
||||||
|
@echo "==> 📦 Packaging Chrome extension..."
|
||||||
|
mkdir -p $(OUTPUT_DIR)/chrome
|
||||||
|
cd $(DIST_DIR) && zip -rq ../../$(CHROME_ZIP) .
|
||||||
|
@echo "==> ✅ Chrome package is ready: $(CHROME_ZIP)"
|
||||||
|
|
||||||
|
firefox: build output builder aibuild
|
||||||
|
@echo "==> 🏗️ Building for Firefox..."
|
||||||
|
sed -e "s/AI_BUILD/$(BUILD)/" manifest-firefox.json > ./build/manifest.json
|
||||||
|
$(DOCKER_COMPOSE_RUN) npm run build
|
||||||
|
@echo "==> ✍️ Signing Firefox extension (this may take a moment)..."
|
||||||
|
$(DOCKER_COMPOSE_RUN) npm run sign:firefox
|
||||||
|
@echo "==> 🚚 Moving signed XPI to output..."
|
||||||
|
mkdir -p $(OUTPUT_DIR)/firefox
|
||||||
|
find $(BUILD_DIR)/amo -name "*.xpi" -exec mv {} $(FIREFOX_XPI) \;
|
||||||
|
@echo "==> ✅ Firefox package is ready: $(FIREFOX_XPI)"
|
||||||
|
|
||||||
|
aibuild:
|
||||||
|
@echo BUILD=$(BUILD) > .aibuild
|
||||||
|
|
||||||
|
output:
|
||||||
|
mkdir output
|
||||||
|
|
||||||
|
build:
|
||||||
|
mkdir build
|
||||||
|
|
||||||
|
builder:
|
||||||
|
docker-compose build
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo "==> 🧹 Cleaning up build artifacts..."
|
||||||
|
rm -rf $(BUILD_DIR) $(OUTPUT_DIR)
|
||||||
@@ -1,18 +1,16 @@
|
|||||||
Build
|
Build
|
||||||
=====
|
=====
|
||||||
|
|
||||||
docker-compose run --rm builder npm run build:chrome
|
make chrome
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
docker-compose run --rm builder npm run build:firefox
|
make firefox
|
||||||
|
|
||||||
Signed
|
Signed
|
||||||
======
|
======
|
||||||
|
|
||||||
Needs AMO API key from Mozilla.
|
Needs AMO API key from Mozilla. Place it to the `.env` file.
|
||||||
|
|
||||||
docker-compose run --rm \
|
AMO_JWT_ISSUER=$USER
|
||||||
-e AMO_JWT_ISSUER="$USER" \
|
AMO_JWT_SECRET=$SECRET
|
||||||
-e AMO_JWT_SECRET="$SECRET" \
|
|
||||||
builder npm run package:firefox-signed
|
|
||||||
|
|||||||
+5
-26
@@ -1,34 +1,13 @@
|
|||||||
version: '3.8'
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# Сервис для ОДНОРАЗОВОЙ СБОРКИ расширения (команда npm run build)
|
|
||||||
# Запускается командой: docker-compose run --rm builder
|
|
||||||
builder:
|
builder:
|
||||||
# Собираем образ на основе нашего Dockerfile.build
|
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile.build
|
dockerfile: Dockerfile.build
|
||||||
# Это магия! Мы "пробрасываем" всю текущую папку внутрь контейнера.
|
env_file:
|
||||||
# Когда внутри контейнера в /app создастся папка dist, она автоматически
|
- .env
|
||||||
# появится и на нашей хост-машине.
|
|
||||||
volumes:
|
volumes:
|
||||||
- .:/app
|
- ./build:/app/build
|
||||||
# Анонимный том для node_modules. Важный трюк!
|
- ./build/manifest.json:/app/manifest.json
|
||||||
# Он предотвращает перезапись папки node_modules, установленной внутри
|
- ./output:/app/output
|
||||||
# контейнера, пустой папкой с хоста.
|
|
||||||
- /app/node_modules
|
|
||||||
|
|
||||||
# Сервис для РЕЖИМА РАЗРАБОТКИ (команда npm run dev)
|
|
||||||
# Запускается командой: docker-compose up dev
|
|
||||||
dev:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile.build
|
|
||||||
ports:
|
|
||||||
# Пробрасываем порт Vite для hot-reload
|
|
||||||
- "5173:5173"
|
|
||||||
volumes:
|
|
||||||
- .:/app
|
|
||||||
- /app/node_modules
|
|
||||||
# Переопределяем команду по умолчанию на запуск dev-сервера
|
|
||||||
command: npm run dev
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "Redmine Reactions",
|
"name": "Redmine Reactions",
|
||||||
"version": "0.1.0",
|
"version": "0.1.AI_BUILD",
|
||||||
"description": "Добавляет реакции на комментарии в локальном Redmine.",
|
"description": "Добавляет реакции на комментарии в локальном Redmine.",
|
||||||
"permissions": ["storage"],
|
"permissions": ["storage"],
|
||||||
"icons": {
|
"icons": {
|
||||||
@@ -10,7 +10,8 @@
|
|||||||
"content_scripts": [
|
"content_scripts": [
|
||||||
{
|
{
|
||||||
"matches": ["https://red.eltex.loc/issues/*"],
|
"matches": ["https://red.eltex.loc/issues/*"],
|
||||||
"js": ["src/content.tsx"]
|
"js": ["src/content.tsx"],
|
||||||
|
"run_at": "document_start"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "Redmine Reactions",
|
"name": "Redmine Reactions",
|
||||||
"version": "0.1.0",
|
"version": "0.1.AI_BUILD",
|
||||||
"description": "Добавляет реакции на комментарии в локальном Redmine.",
|
"description": "Добавляет реакции на комментарии в локальном Redmine.",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"storage",
|
"storage",
|
||||||
@@ -13,7 +13,8 @@
|
|||||||
"content_scripts": [
|
"content_scripts": [
|
||||||
{
|
{
|
||||||
"matches": ["https://red.eltex.loc/issues/*"],
|
"matches": ["https://red.eltex.loc/issues/*"],
|
||||||
"js": ["src/content.tsx"]
|
"js": ["src/content.tsx"],
|
||||||
|
"run_at": "document_start"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"browser_specific_settings": {
|
"browser_specific_settings": {
|
||||||
|
|||||||
+3
-6
@@ -5,12 +5,9 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "tsc && vite build",
|
"build": "tsc && vite build --outDir build/dist --emptyOutDir",
|
||||||
"build:firefox": "cp manifest-firefox.json manifest.json && tsc && vite build",
|
"lint": "tsc --noEmit",
|
||||||
"package:firefox": "npm run build:firefox && web-ext build --source-dir dist/ --overwrite-dest",
|
"sign:firefox": "web-ext sign --source-dir build/dist --artifacts-dir build/amo --api-key=$AMO_JWT_ISSUER --api-secret=$AMO_JWT_SECRET"
|
||||||
"package:firefox-signed": "echo -e 'nameserver 1.1.1.1\noptions single-request-reopen' > /etc/resolv.conf && npm run build:firefox && web-ext sign --source-dir dist/ --api-key=$AMO_JWT_ISSUER --api-secret=$AMO_JWT_SECRET",
|
|
||||||
"build:chrome": "cp manifest-chrome.json manifest.json && npm run build",
|
|
||||||
"package:chrome": "npm run build:chrome && crx3 dist/ --key redmine-reactions.pem --output dist/redmine-reactions.crx"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"webextension-polyfill": "^0.10.0",
|
"webextension-polyfill": "^0.10.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user