javi-forge 1.23.0 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/hooks/manifest.json +12 -4
- package/assets/hooks/pre-commit +8 -7
- package/assets/hooks/pre-push +10 -31
- package/ci-local/README.md +2 -2
- package/ci-local/ci-local.ps1 +1 -3
- package/ci-local/ci-local.sh +1 -3
- package/ci-local/docker/elixir.Dockerfile +6 -0
- package/ci-local/docker/go.Dockerfile +7 -0
- package/ci-local/docker/java-gradle.Dockerfile +7 -0
- package/ci-local/docker/java-maven.Dockerfile +7 -0
- package/ci-local/docker/java.Dockerfile +7 -0
- package/ci-local/docker/python.Dockerfile +7 -0
- package/ci-local/docker/rust.Dockerfile +7 -0
- package/dist/lib/docker.js +23 -3
- package/package.json +1 -1
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"pre-commit": {
|
|
3
|
-
"version":
|
|
4
|
-
"sha256": "
|
|
3
|
+
"version": 2,
|
|
4
|
+
"sha256": "6155f375647d13a8e86aff74d1b17165e0781ce8c94f9f1304724a8a54948b00",
|
|
5
5
|
"historical": [
|
|
6
6
|
{
|
|
7
7
|
"sha256": "811f34ce57517e129554bc9c09801a66c0207332cd3e7f2950db43a40580e914",
|
|
8
8
|
"firstCommit": "5587b3b9b9ed3c86809c0a3d89a850dd2bce7e1a"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"sha256": "6155f375647d13a8e86aff74d1b17165e0781ce8c94f9f1304724a8a54948b00",
|
|
12
|
+
"firstCommit": "0779d746b23ad614a13181d60f1fe3aa034e91dd"
|
|
9
13
|
}
|
|
10
14
|
]
|
|
11
15
|
},
|
|
12
16
|
"pre-push": {
|
|
13
|
-
"version":
|
|
14
|
-
"sha256": "
|
|
17
|
+
"version": 3,
|
|
18
|
+
"sha256": "c396387a15c3c448d524f68597a993f6b4341ae06143d2d5907ad914823d0ad0",
|
|
15
19
|
"historical": [
|
|
16
20
|
{
|
|
17
21
|
"sha256": "7de58640aeef33085a49f31f1d9d0c8bacde0069d6d3265ae41aa8d3cd14d7a5",
|
|
@@ -20,6 +24,10 @@
|
|
|
20
24
|
{
|
|
21
25
|
"sha256": "3dad58303d81fc513a35339083438a78aa483fcd28e3377f006bd26e8ce76a6d",
|
|
22
26
|
"firstCommit": "a35e09d39a5394d6380499d1ed73fdf22f08c829"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"sha256": "c396387a15c3c448d524f68597a993f6b4341ae06143d2d5907ad914823d0ad0",
|
|
30
|
+
"firstCommit": "0779d746b23ad614a13181d60f1fe3aa034e91dd"
|
|
23
31
|
}
|
|
24
32
|
]
|
|
25
33
|
},
|
package/assets/hooks/pre-commit
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
#
|
|
2
|
+
# pre-commit: javi-forge hook dispatcher
|
|
3
|
+
# Runs the sections enabled under hooks: in .javi-forge/ci.yaml.
|
|
4
|
+
# Default: quick native CI gate (setup + lint + compile + gates — no tests, no coverage).
|
|
5
|
+
# Requires javi-forge on PATH (npx fallback; offline npx fails -> hook fails closed).
|
|
3
6
|
# To skip: git commit --no-verify
|
|
4
7
|
set -e
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
javi-forge ci --quick --no-docker --no-security --no-ci-ghagga
|
|
8
|
+
if command -v javi-forge >/dev/null 2>&1; then
|
|
9
|
+
javi-forge hooks run pre-commit
|
|
8
10
|
else
|
|
9
|
-
npx javi-forge
|
|
11
|
+
npx javi-forge hooks run pre-commit
|
|
10
12
|
fi || {
|
|
11
13
|
echo ""
|
|
12
|
-
echo "
|
|
13
|
-
echo "To skip: git commit --no-verify"
|
|
14
|
+
echo "pre-commit FAILED - fix the issues above."
|
|
14
15
|
exit 1
|
|
15
16
|
}
|
package/assets/hooks/pre-push
CHANGED
|
@@ -1,37 +1,16 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
# This is deliberately NOT the full containerized run: the native path
|
|
8
|
-
# sidesteps the pre-push container EACCES failure while keeping fail-closed
|
|
9
|
-
# image-gate enforcement where it belongs — the ci gate layer REFUSES any
|
|
10
|
-
# blocking image gate under --no-docker (see src/commands/ci.ts runGates).
|
|
11
|
-
# Requires: npm install -g javi-forge (npx fallback used when absent).
|
|
12
|
-
# To skip: git push --no-verify
|
|
13
|
-
# Target: under ~180s. Elapsed time is reported below.
|
|
14
|
-
# =============================================================================
|
|
15
|
-
|
|
2
|
+
# pre-push: javi-forge hook dispatcher
|
|
3
|
+
# Runs the sections enabled under hooks: in .javi-forge/ci.yaml.
|
|
4
|
+
# Default: quick native CI gate (setup + lint + compile + gates — no tests, no coverage).
|
|
5
|
+
# Requires javi-forge on PATH (npx fallback; offline npx fails -> hook fails closed).
|
|
6
|
+
# To skip: git push --no-verify
|
|
16
7
|
set -e
|
|
17
|
-
|
|
18
|
-
_start=$SECONDS
|
|
19
|
-
|
|
20
|
-
echo "PRE-PUSH: Running native CI checks (validate + coverage)..."
|
|
21
8
|
if command -v javi-forge >/dev/null 2>&1; then
|
|
22
|
-
|
|
9
|
+
javi-forge hooks run pre-push
|
|
23
10
|
else
|
|
24
|
-
|
|
11
|
+
npx javi-forge hooks run pre-push
|
|
25
12
|
fi || {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
echo "To skip: git push --no-verify"
|
|
30
|
-
exit 1
|
|
13
|
+
echo ""
|
|
14
|
+
echo "pre-push FAILED - fix the issues above."
|
|
15
|
+
exit 1
|
|
31
16
|
}
|
|
32
|
-
|
|
33
|
-
_elapsed=$((SECONDS - _start))
|
|
34
|
-
echo "PRE-PUSH: passed in ${_elapsed}s (target: 180s)"
|
|
35
|
-
if [ "$_elapsed" -gt 300 ]; then
|
|
36
|
-
echo " WARNING: pre-push took ${_elapsed}s, well over the 180s target."
|
|
37
|
-
fi
|
package/ci-local/README.md
CHANGED
|
@@ -174,7 +174,7 @@ Developer workflow:
|
|
|
174
174
|
│ ├── commit-msg # Valida mensaje sin AI attribution
|
|
175
175
|
│ └── pre-push # CI simulation en Docker
|
|
176
176
|
└── docker/
|
|
177
|
-
└── *.Dockerfile #
|
|
177
|
+
└── *.Dockerfile # Incluidos para cada stack (fallback: se regeneran si faltan)
|
|
178
178
|
|
|
179
179
|
lib/ # Dependencia requerida (copiar junto con .ci-local/)
|
|
180
180
|
├── common.sh # Funciones compartidas (Bash)
|
|
@@ -193,7 +193,7 @@ Editar `lib/common.sh` (detección de stack) o `setup_ci_commands()` en `ci-loca
|
|
|
193
193
|
|
|
194
194
|
### Docker image custom
|
|
195
195
|
|
|
196
|
-
Editar los Dockerfiles en `.ci-local/docker/`
|
|
196
|
+
Editar los Dockerfiles en `.ci-local/docker/` (incluidos por stack).
|
|
197
197
|
|
|
198
198
|
## FAQ
|
|
199
199
|
|
package/ci-local/ci-local.ps1
CHANGED
|
@@ -177,7 +177,6 @@ RUN apt-get update && apt-get install -y git curl unzip && rm -rf /var/lib/apt/l
|
|
|
177
177
|
RUN useradd -m -s /bin/bash runner
|
|
178
178
|
USER runner
|
|
179
179
|
WORKDIR /home/runner/work
|
|
180
|
-
ENV GRADLE_USER_HOME=/home/runner/.gradle
|
|
181
180
|
ENTRYPOINT ["/bin/bash", "-c"]
|
|
182
181
|
'@
|
|
183
182
|
}
|
|
@@ -207,8 +206,7 @@ ENTRYPOINT ["/bin/bash", "-c"]
|
|
|
207
206
|
@'
|
|
208
207
|
FROM golang:1.23-bookworm@sha256:167053a2bb901972bf2c1611f8f52c44d5fe7e762e5cab213708d82c421614db
|
|
209
208
|
RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
|
|
210
|
-
RUN go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.62.0 &&
|
|
211
|
-
mv /root/go/bin/golangci-lint /usr/local/bin/
|
|
209
|
+
RUN go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.62.0 && mv /root/go/bin/golangci-lint /usr/local/bin/
|
|
212
210
|
RUN useradd -m -s /bin/bash runner
|
|
213
211
|
USER runner
|
|
214
212
|
WORKDIR /home/runner/work
|
package/ci-local/ci-local.sh
CHANGED
|
@@ -174,7 +174,6 @@ RUN apt-get update && apt-get install -y git curl unzip && rm -rf /var/lib/apt/l
|
|
|
174
174
|
RUN useradd -m -s /bin/bash runner
|
|
175
175
|
USER runner
|
|
176
176
|
WORKDIR /home/runner/work
|
|
177
|
-
ENV GRADLE_USER_HOME=/home/runner/.gradle
|
|
178
177
|
ENTRYPOINT ["/bin/bash", "-c"]
|
|
179
178
|
DOCKERFILE
|
|
180
179
|
;;
|
|
@@ -204,8 +203,7 @@ DOCKERFILE
|
|
|
204
203
|
cat > "$docker_dir/$DOCKERFILE" << 'DOCKERFILE'
|
|
205
204
|
FROM golang:1.23-bookworm@sha256:167053a2bb901972bf2c1611f8f52c44d5fe7e762e5cab213708d82c421614db
|
|
206
205
|
RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
|
|
207
|
-
RUN go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.62.0 &&
|
|
208
|
-
mv /root/go/bin/golangci-lint /usr/local/bin/
|
|
206
|
+
RUN go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.62.0 && mv /root/go/bin/golangci-lint /usr/local/bin/
|
|
209
207
|
RUN useradd -m -s /bin/bash runner
|
|
210
208
|
USER runner
|
|
211
209
|
WORKDIR /home/runner/work
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
FROM ubuntu:24.04@sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b
|
|
2
|
+
RUN apt-get update && apt-get install -y git curl && rm -rf /var/lib/apt/lists/*
|
|
3
|
+
RUN useradd -m -s /bin/bash runner
|
|
4
|
+
USER runner
|
|
5
|
+
WORKDIR /home/runner/work
|
|
6
|
+
ENTRYPOINT ["/bin/bash", "-c"]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
FROM golang:1.23-bookworm@sha256:167053a2bb901972bf2c1611f8f52c44d5fe7e762e5cab213708d82c421614db
|
|
2
|
+
RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
|
|
3
|
+
RUN go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.62.0 && mv /root/go/bin/golangci-lint /usr/local/bin/
|
|
4
|
+
RUN useradd -m -s /bin/bash runner
|
|
5
|
+
USER runner
|
|
6
|
+
WORKDIR /home/runner/work
|
|
7
|
+
ENTRYPOINT ["/bin/bash", "-c"]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
ARG JAVA_VERSION=21
|
|
2
|
+
FROM eclipse-temurin:${JAVA_VERSION}-jdk-noble
|
|
3
|
+
RUN apt-get update && apt-get install -y git curl unzip && rm -rf /var/lib/apt/lists/*
|
|
4
|
+
RUN useradd -m -s /bin/bash runner
|
|
5
|
+
USER runner
|
|
6
|
+
WORKDIR /home/runner/work
|
|
7
|
+
ENTRYPOINT ["/bin/bash", "-c"]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
ARG JAVA_VERSION=21
|
|
2
|
+
FROM eclipse-temurin:${JAVA_VERSION}-jdk-noble
|
|
3
|
+
RUN apt-get update && apt-get install -y git curl unzip && rm -rf /var/lib/apt/lists/*
|
|
4
|
+
RUN useradd -m -s /bin/bash runner
|
|
5
|
+
USER runner
|
|
6
|
+
WORKDIR /home/runner/work
|
|
7
|
+
ENTRYPOINT ["/bin/bash", "-c"]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
ARG JAVA_VERSION=21
|
|
2
|
+
FROM eclipse-temurin:${JAVA_VERSION}-jdk-noble
|
|
3
|
+
RUN apt-get update && apt-get install -y git curl unzip && rm -rf /var/lib/apt/lists/*
|
|
4
|
+
RUN useradd -m -s /bin/bash runner
|
|
5
|
+
USER runner
|
|
6
|
+
WORKDIR /home/runner/work
|
|
7
|
+
ENTRYPOINT ["/bin/bash", "-c"]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
FROM python:3.12-slim@sha256:401f6e1a67dad31a1bd78e9ad22d0ee0a3b52154e6bd30e90be696bb6a3d7461
|
|
2
|
+
RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
|
|
3
|
+
RUN pip install --no-cache-dir pytest ruff pylint poetry
|
|
4
|
+
RUN useradd -m -s /bin/bash runner
|
|
5
|
+
USER runner
|
|
6
|
+
WORKDIR /home/runner/work
|
|
7
|
+
ENTRYPOINT ["/bin/bash", "-c"]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
FROM rust:1.83-slim@sha256:540c902e99c384163b688bbd8b5b8520e94e7731b27f7bd0eaa56ae1960627ab
|
|
2
|
+
RUN apt-get update && apt-get install -y git pkg-config libssl-dev && rm -rf /var/lib/apt/lists/*
|
|
3
|
+
RUN rustup component add clippy rustfmt
|
|
4
|
+
RUN useradd -m -s /bin/bash runner
|
|
5
|
+
USER runner
|
|
6
|
+
WORKDIR /home/runner/work
|
|
7
|
+
ENTRYPOINT ["/bin/bash", "-c"]
|
package/dist/lib/docker.js
CHANGED
|
@@ -38,6 +38,14 @@ export function getDockerfileContent(stack) {
|
|
|
38
38
|
"RUN apt-get update && apt-get install -y git curl unzip && rm -rf /var/lib/apt/lists/*",
|
|
39
39
|
"RUN useradd -m -s /bin/bash runner",
|
|
40
40
|
"USER runner",
|
|
41
|
+
// No GRADLE_USER_HOME override (audit R4-001): on noble the
|
|
42
|
+
// `ubuntu` user owns uid 1000, so `useradd -m runner` lands at
|
|
43
|
+
// uid 1001 and /home/runner is 0750 runner:runner. Pinning
|
|
44
|
+
// GRADLE_USER_HOME=/home/runner/.gradle hard-fails the TS
|
|
45
|
+
// runtime path, which runs as the HOST uid (ENV-1, typically
|
|
46
|
+
// 1000) and cannot create that dir. Without the env both paths
|
|
47
|
+
// work off $HOME: shell path (--user runner) → /home/runner;
|
|
48
|
+
// host-uid path → getpwuid(1000) → /home/ubuntu.
|
|
41
49
|
"WORKDIR /home/runner/work",
|
|
42
50
|
'ENTRYPOINT ["/bin/bash", "-c"]',
|
|
43
51
|
].join("\n");
|
|
@@ -143,10 +151,22 @@ export async function ensureImage(options) {
|
|
|
143
151
|
path.join(path.dirname(fileURLToPath(import.meta.url)), "../../ci-local/docker");
|
|
144
152
|
dockerfilePath = path.join(dockerDir, `${stack}.Dockerfile`);
|
|
145
153
|
contextDir = dockerDir;
|
|
146
|
-
// Write Dockerfile if it doesn't exist yet (first run)
|
|
147
154
|
if (!(await fs.pathExists(dockerfilePath))) {
|
|
148
|
-
|
|
149
|
-
|
|
155
|
+
if (dockerfilesDir) {
|
|
156
|
+
// Caller-provided generation dir (dev / project-local flow):
|
|
157
|
+
// first-run generation is expected — write the canonical content.
|
|
158
|
+
await fs.ensureDir(dockerDir);
|
|
159
|
+
await fs.writeFile(dockerfilePath, getDockerfileContent(stack), "utf-8");
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// PKG-002: the package bundles a Dockerfile for EVERY stack, so a
|
|
163
|
+
// miss here means a corrupted/incomplete install. Writing into the
|
|
164
|
+
// install dir would EACCES on root-owned global installs and mask
|
|
165
|
+
// the real problem — fail closed with a clear message instead.
|
|
166
|
+
throw new Error(`bundled Dockerfile "${stack}.Dockerfile" is missing from ` +
|
|
167
|
+
`"${dockerDir}" — the javi-forge installation looks corrupted; ` +
|
|
168
|
+
"reinstall the package (or pass an explicit dockerfilesDir)");
|
|
169
|
+
}
|
|
150
170
|
}
|
|
151
171
|
}
|
|
152
172
|
// Staleness check: compare Dockerfile hash with the one embedded in the image label
|