Compare commits

..

1 Commits

Author SHA1 Message Date
renovate-bot 8995eda9db chore(deps): update https://gitea.t000-n.de/t.behrendt/actions action to v0.2.7
CI / Dry-Run (pull_request) Successful in 11s
2026-06-21 15:30:44 +00:00
21 changed files with 179 additions and 24605 deletions
-8
View File
@@ -1,8 +0,0 @@
[*]
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
max_line_length = 80
+2 -2
View File
@@ -13,7 +13,7 @@ jobs:
name: Release name: Release
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Increment tag - name: Increment tag
@@ -21,6 +21,6 @@ jobs:
uses: https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment@e393dbb067c09fd43519392572ccf63b66cba92d # 0.1.39 uses: https://gitea.t000-n.de/t.behrendt/conventional-semantic-git-tag-increment@e393dbb067c09fd43519392572ccf63b66cba92d # 0.1.39
with: with:
token: ${{ secrets.GITEA_TOKEN }} token: ${{ secrets.GITEA_TOKEN }}
- uses: https://gitea.t000-n.de/t.behrendt/actions/release-git-tag@29f50ea246d5d9a62ac3c611fa5c8a6e9846df5a # 0.2.8 - uses: https://gitea.t000-n.de/t.behrendt/actions/release-git-tag@0841ccc70fc2c1526123785f3b0a510a6ba4bdfc # 0.2.7
with: with:
tag: ${{ steps.tag.outputs.new-tag }} tag: ${{ steps.tag.outputs.new-tag }}
+2 -55
View File
@@ -8,61 +8,8 @@ jobs:
name: Dry-Run name: Dry-Run
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Validate Renovate Config - name: Validate JSON
uses: ./ uses: ./
with: with:
json-file: renovate.json json-file: renovate.json
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: .nvmrc
- name: Cache dependencies
id: cache-deps
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
- name: Install dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
run: npm ci
- name: Typecheck
run: npm run typecheck
- name: Format code
run: npm run format:check
- name: Run test
run: npm run test
check-dist:
name: Check Dist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: .nvmrc
- name: Cache dependencies
id: cache-deps
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
- name: Install dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
run: npm ci
- run: mv dist dist_orig
- run: npm run build
- run: |
original_hash=$(sha256sum dist_orig/index.js | cut -d' ' -f1)
new_hash=$(sha256sum dist/index.js | cut -d' ' -f1)
if [ "$original_hash" != "$new_hash" ]; then
echo "Build is not up to date. Original hash: $original_hash, new hash: $new_hash"
exit 1
fi
+2 -2
View File
@@ -8,7 +8,7 @@ jobs:
name: Release name: Release
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Increment tag - name: Increment tag
@@ -17,6 +17,6 @@ jobs:
with: with:
token: ${{ secrets.GITEA_TOKEN }} token: ${{ secrets.GITEA_TOKEN }}
prerelease: true prerelease: true
- uses: https://gitea.t000-n.de/t.behrendt/actions/release-git-tag@29f50ea246d5d9a62ac3c611fa5c8a6e9846df5a # 0.2.8 - uses: https://gitea.t000-n.de/t.behrendt/actions/release-git-tag@0841ccc70fc2c1526123785f3b0a510a6ba4bdfc # 0.2.7
with: with:
tag: ${{ steps.tag.outputs.new-tag }} tag: ${{ steps.tag.outputs.new-tag }}
+137 -1
View File
@@ -1,2 +1,138 @@
node_modules # ---> Node
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# vitepress build output
**/.vitepress/dist
# vitepress cache directory
**/.vitepress/cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
-1
View File
@@ -1 +0,0 @@
min-release-age=7
-2
View File
@@ -1,2 +0,0 @@
24
-4
View File
@@ -1,4 +0,0 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"ignorePatterns": ["dist/**", "node_modules/**", "coverage/**"]
}
+23 -2
View File
@@ -8,5 +8,26 @@ inputs:
required: true required: true
runs: runs:
using: "node24" using: "composite"
main: "dist/index.js" steps:
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: "latest"
- name: Extract schema
shell: bash
run: |
schema=$(jq -r '.["$schema"]' < ${{ inputs.json-file }})
if [ -n "$schema" ]; then
curl -s $schema > schema.json
else
echo "No schema found"
exit 0
fi
- name: Update the schema to the latest version
shell: bash
run: |
npx ajv-cli migrate -s schema.json -o schema.json
- name: Validate JSON
shell: bash
run: |
npx ajv-cli validate -s schema.json -d ${{ inputs.json-file }} --strict=false
-22249
View File
File diff suppressed because one or more lines are too long
-2037
View File
File diff suppressed because it is too large Load Diff
-25
View File
@@ -1,25 +0,0 @@
{
"name": "validate-json-by-json-schema-action",
"version": "1.0.0",
"type": "commonjs",
"main": "src/index.ts",
"scripts": {
"test": "vitest --config vitext.config.ts",
"format": "oxfmt",
"format:check": "oxfmt --check",
"build": "rolldown -c",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@actions/core": "3.0.1",
"ajv": "8.20.0"
},
"devDependencies": {
"@types/node": "24.13.2",
"@vitest/coverage-v8": "4.1.9",
"oxfmt": "0.56.0",
"rolldown": "1.1.3",
"typescript": "6.0.3",
"vitest": "4.1.9"
}
}
+3 -8
View File
@@ -1,12 +1,7 @@
{ {
"$schema": "https://docs.renovatebot.com/renovate-schema.json", "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [ "extends": [
"local>t.behrendt/renovate-configs:action", "local>t.behrendt/renovate-configs:common",
"local>t.behrendt/renovate-configs:bun-npm" "local>t.behrendt/renovate-configs:action"
], ]
"postUpgradeTasks": {
"commands": ["npm ci", "npm run build"],
"fileFilters": ["dist/**"],
"executionMode": "update"
}
} }
-11
View File
@@ -1,11 +0,0 @@
import { defineConfig } from "rolldown";
export default defineConfig({
input: "src/index.ts",
platform: "node",
tsconfig: "./tsconfig.json",
output: {
file: "dist/index.js",
format: "cjs",
},
});
-3
View File
@@ -1,3 +0,0 @@
import { run } from "./main";
run();
-18
View File
@@ -1,18 +0,0 @@
import * as core from "@actions/core";
import { readFileSync } from "node:fs";
import { validateJson } from "./validation";
export async function run(): Promise<void> {
try {
const jsonFilePath = core.getInput("json-file");
core.info(`Validating JSON file: ${jsonFilePath}`);
const json = readFileSync(jsonFilePath, "utf8");
await validateJson(json);
core.info("JSON file is valid");
} catch (error) {
core.setFailed(`Error validating JSON file: ${error}`);
}
}
-109
View File
@@ -1,109 +0,0 @@
import { beforeEach, describe, expect, it, vi } from "vitest";
import { validateJson } from "./validation";
global.fetch = vi.fn();
const validSchema = JSON.stringify({
$id: "https://t00n.de/schema.json",
title:
"JSON schema for Renovate 43.244.4 config files (https://renovatebot.com/)",
$schema: "http://json-schema.org/draft-07/schema#",
type: "object",
properties: {
$schema: {
type: "string",
},
name: {
type: "string",
},
},
required: ["name"],
additionalProperties: false,
});
describe("validateJson()", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("throws an error if the JSON file is not valid JSON", async () => {
const jsonFile = {
despiteThisBeingValidJson: "toString() breaks it, making it invalid",
}.toString();
await expect(validateJson(jsonFile)).rejects.toThrow(
'"[object Object]" is not valid JSON',
);
});
it("throws an error if the JSON file does not contain a $schema property", async () => {
const jsonFile = JSON.stringify({
validJson: true,
});
await expect(validateJson(jsonFile)).rejects.toThrow(
"No schema found in JSON file.",
);
});
it("throws an error if the schema cannot be fetched", async () => {
vi.mocked(fetch).mockRejectedValue(new Error("Failed to fetch schema"));
const jsonFile = JSON.stringify({ $schema: "http://t00n.de/404.json" });
await expect(validateJson(jsonFile)).rejects.toThrow(
"Failed to fetch schema",
);
});
it("throws an error if the schema file is not valid", async () => {
vi.mocked(fetch).mockResolvedValue(
// @ts-expect-error - mock response
{
ok: true,
text: async () =>
({
despiteThisBeingValidJson:
"toString() breaks it, making it invalid",
}).toString(),
},
);
const jsonFile = JSON.stringify({
$schema: "https://json-schema.org/draft-07/schema",
});
await expect(validateJson(jsonFile)).rejects.toThrow(
'"[object Object]" is not valid JSON',
);
});
it("throws an error if the JSON file does not match the schema", async () => {
vi.mocked(fetch).mockResolvedValue(
// @ts-expect-error - mock response
{
ok: true,
text: async () => validSchema,
},
);
const jsonFile = JSON.stringify({
$schema: "https://json-schema.org/draft-07/schema",
notTheExpectedField: 42,
});
await expect(validateJson(jsonFile)).rejects.toThrow(
"JSON file is not valid: No errors",
);
});
it("does not throw an error if the JSON file is valid", async () => {
vi.mocked(fetch).mockResolvedValue(
// @ts-expect-error - mock response
{
ok: true,
text: async () => validSchema,
},
);
const jsonFile = JSON.stringify({
$schema: "https://t00n.de/schema.json",
name: "John Doe",
});
await expect(validateJson(jsonFile)).resolves.toBeUndefined();
});
});
-25
View File
@@ -1,25 +0,0 @@
import Ajv from "ajv";
export const validateJson = async (jsonFileContent: string): Promise<void> => {
const jsonObject = JSON.parse(jsonFileContent);
const schema = jsonObject["$schema"];
if (!schema) {
throw new Error("No schema found in JSON file.");
}
const schemaUrl = new URL(schema);
const schemaContent = await fetch(schemaUrl.toString());
const schemaText = await schemaContent.text();
const schemaObject = JSON.parse(schemaText);
const validator = new Ajv({
strict: false,
});
const validate = validator.compile(schemaObject);
const isValid = validate(jsonObject);
if (!isValid) {
throw new Error(`JSON file is not valid: ${validator.errorsText()}`);
}
};
-22
View File
@@ -1,22 +0,0 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "commonjs",
"lib": ["ES2022"],
"types": ["node"],
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"removeComments": false,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"exactOptionalPropertyTypes": true,
"noImplicitOverride": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"]
}
-11
View File
@@ -1,11 +0,0 @@
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
coverage: {
enabled: true,
provider: "v8",
reporter: ["lcov"],
},
},
});