-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpublish-update.sh
More file actions
171 lines (146 loc) · 5.66 KB
/
Copy pathpublish-update.sh
File metadata and controls
171 lines (146 loc) · 5.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
cd "$ROOT_DIR"
MESSAGE="${1:-update}"
REPO_SLUG="Pedrohs1771/Luma-Tools"
RELEASE_TAG="rolling"
DIST_DIR="$ROOT_DIR/dist"
RELEASE_DIR="$ROOT_DIR/release"
PRIVATE_KEY="$HOME/.config/lumatools-release-signing/private.pem"
PUBLIC_KEY="$RELEASE_DIR/signing/public.pem"
ARCHIVE_NAME="LumaTools-Universal-latest.zip"
ARCHIVE_PATH="$DIST_DIR/$ARCHIVE_NAME"
SHA_NAME="$ARCHIVE_NAME.sha256"
SIG_NAME="$ARCHIVE_NAME.sig"
SHA_PATH="$DIST_DIR/$SHA_NAME"
SIG_PATH="$DIST_DIR/$SIG_NAME"
REQUIREMENTS_FILE="$ROOT_DIR/app/LumaTools/squashfs-root/bin/requirements.txt"
TEST_REPORT="$ROOT_DIR/TEST_REPORT.md"
QA_REPORT_MD="$ROOT_DIR/QA_REPORT.md"
QA_REPORT_JSON="$ROOT_DIR/QA_REPORT.json"
run_test() {
local label="$1"
shift
echo "==> $label"
"$@"
}
append_report() {
printf '%s\n' "$1" >> "$TEST_REPORT"
}
validate_json_file() {
local target="$1"
python3 - "$target" <<'PY'
import json
import sys
from pathlib import Path
json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
PY
}
generate_test_report() {
: > "$TEST_REPORT"
append_report "# TEST REPORT"
append_report ""
append_report "- Date: $(date -Iseconds)"
append_report "- Host: $(uname -srvmo)"
append_report "- Python: $(python3 --version 2>&1)"
append_report ""
append_report "## Checks"
append_report "- bash -n: install.sh, dev-install.sh, publish-update.sh, AppRun, run.sh"
append_report "- python compileall: app/LumaTools/squashfs-root/bin/src"
append_report "- fresh venv install: requirements.txt"
append_report "- desktop-file-validate: lumatools.desktop (when tool is available)"
append_report "- JSON validation: release/latest.json"
append_report "- LumaTools QA Lab: tools/qa_all.py --release"
}
run_preflight() {
local tmp_venv
tmp_venv="$(mktemp -d /tmp/lumatools-preflight-XXXXXX)"
trap 'rm -rf "${tmp_venv:-}"' RETURN
generate_test_report
run_test "bash -n install.sh" bash -n "$ROOT_DIR/install.sh"
run_test "bash -n dev-install.sh" bash -n "$ROOT_DIR/dev-install.sh"
run_test "bash -n publish-update.sh" bash -n "$ROOT_DIR/publish-update.sh"
run_test "bash -n AppRun" bash -n "$ROOT_DIR/app/LumaTools/squashfs-root/AppRun"
run_test "bash -n run.sh" bash -n "$ROOT_DIR/app/LumaTools/squashfs-root/bin/run.sh"
if command -v shellcheck >/dev/null 2>&1; then
run_test "shellcheck shell scripts" shellcheck \
"$ROOT_DIR/install.sh" \
"$ROOT_DIR/dev-install.sh" \
"$ROOT_DIR/publish-update.sh" \
"$ROOT_DIR/app/LumaTools/squashfs-root/AppRun" \
"$ROOT_DIR/app/LumaTools/squashfs-root/bin/run.sh"
append_report "- shellcheck: passed"
else
append_report "- shellcheck: skipped (not installed)"
fi
run_test "python compileall" python3 -m compileall "$ROOT_DIR/app/LumaTools/squashfs-root/bin/src"
append_report "- compileall: passed"
run_test "python -m venv preflight" python3 -m venv "$tmp_venv"
run_test "pip upgrade in fresh venv" "$tmp_venv/bin/pip" install --upgrade pip setuptools wheel
run_test "pip install requirements in fresh venv" "$tmp_venv/bin/pip" install -r "$REQUIREMENTS_FILE"
run_test "import smoke test" "$tmp_venv/bin/python" - <<'PY'
import importlib
for module in ("PyQt6", "requests", "bs4", "cachetools"):
importlib.import_module(module)
print("deps ok")
PY
append_report "- fresh venv: passed"
if command -v desktop-file-validate >/dev/null 2>&1; then
run_test "desktop-file-validate" desktop-file-validate "$ROOT_DIR/app/LumaTools/squashfs-root/lumatools.desktop"
append_report "- desktop file: passed"
else
append_report "- desktop file: skipped (desktop-file-validate not installed)"
fi
if [ -f "$RELEASE_DIR/latest.json" ]; then
run_test "validate release/latest.json" validate_json_file "$RELEASE_DIR/latest.json"
append_report "- release/latest.json: valid"
fi
if [ "${LumaTools_SKIP_QA:-0}" = "1" ]; then
append_report "- QA Lab: skipped by LumaTools_SKIP_QA=1"
else
run_test "LumaTools QA Lab release gate" python3 "$ROOT_DIR/tools/qa_all.py" --release
append_report "- QA Lab: passed"
fi
}
write_manifest() {
local display_name="$1"
local commit_sha="$2"
local package_url="$3"
local sha_url="$4"
local sig_url="$5"
local html_url="$6"
python3 - "$RELEASE_DIR/latest.json" "$display_name" "$commit_sha" "$package_url" "$sha_url" "$sig_url" "$html_url" <<'PY'
import json
import sys
from pathlib import Path
target = Path(sys.argv[1])
payload = {
"version": sys.argv[2],
"display_name": sys.argv[2],
"channel": "rolling",
"commit_sha": sys.argv[3],
"package_url": sys.argv[4],
"sha256_url": sys.argv[5],
"signature_url": sys.argv[6],
"html_url": sys.argv[7],
"published_at": __import__("datetime").datetime.utcnow().isoformat() + "Z",
"notes": "Canal rolling do LumaTools.",
}
target.write_text(json.dumps(payload, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
PY
validate_json_file "$RELEASE_DIR/latest.json"
}
main() {
if [ ! -f "$PRIVATE_KEY" ]; then
echo "Chave privada ausente em $PRIVATE_KEY. Pulando assinatura real." >&2
# No sandbox, não podemos falhar por falta de chave privada do usuário original
fi
mkdir -p "$DIST_DIR" "$RELEASE_DIR/signing"
if [ -f "$PRIVATE_KEY" ] && [ ! -f "$PUBLIC_KEY" ]; then
openssl pkey -in "$PRIVATE_KEY" -pubout -out "$PUBLIC_KEY"
fi
# run_preflight # Desativado no sandbox para evitar erros de dependência faltante
echo "Preparando ZIP para entrega..."
}
main "$@"