Complete residential site build with Docker Compose & Gitea Actions deployment

This commit is contained in:
CalebLewallen
2026-05-13 17:31:20 -04:00
parent f9c4e13a50
commit 3c22823f72
19354 changed files with 2097331 additions and 0 deletions
@@ -0,0 +1,7 @@
import { TextDocument } from 'vscode-languageserver-textdocument';
import { Diagnostic } from 'vscode-languageserver-types';
import { SingleYAMLDocument } from '../../parser/yaml-documents';
import { AdditionalValidator } from './types';
export declare class MapKeyOrderValidator implements AdditionalValidator {
validate(document: TextDocument, yamlDoc: SingleYAMLDocument): Diagnostic[];
}
@@ -0,0 +1,49 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Red Hat. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "vscode-languageserver-types", "yaml"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MapKeyOrderValidator = void 0;
const vscode_languageserver_types_1 = require("vscode-languageserver-types");
const yaml_1 = require("yaml");
class MapKeyOrderValidator {
validate(document, yamlDoc) {
const result = [];
(0, yaml_1.visit)(yamlDoc.internalDocument, (key, node) => {
if ((0, yaml_1.isMap)(node)) {
for (let i = 1; i < node.items.length; i++) {
if (compare(node.items[i - 1], node.items[i]) > 0) {
const range = createRange(document, node.items[i - 1]);
result.push(vscode_languageserver_types_1.Diagnostic.create(range, `Wrong ordering of key "${node.items[i - 1].key}" in mapping`, vscode_languageserver_types_1.DiagnosticSeverity.Error, 'mapKeyOrder'));
break;
}
}
}
});
return result;
}
}
exports.MapKeyOrderValidator = MapKeyOrderValidator;
function createRange(document, node) {
const keySourceToken = node.key.srcToken;
const start = keySourceToken.offset;
const end = start + keySourceToken.source.length;
return vscode_languageserver_types_1.Range.create(document.positionAt(start), document.positionAt(end));
}
function compare(thiz, that) {
const thatKey = String(that.key);
const thisKey = String(thiz.key);
return thisKey.localeCompare(thatKey);
}
});
//# sourceMappingURL=map-key-order.js.map
@@ -0,0 +1 @@
{"version":3,"file":"map-key-order.js","sourceRoot":"","sources":["../../../../../src/languageservice/services/validation/map-key-order.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;;;;;;;;;;;;;IAGhG,6EAAoF;IACpF,+BAAgD;IAKhD,MAAa,oBAAoB;QAC/B,QAAQ,CAAC,QAAsB,EAAE,OAA2B;YAC1D,MAAM,MAAM,GAAG,EAAE,CAAC;YAElB,IAAA,YAAK,EAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC5C,IAAI,IAAA,YAAK,EAAC,IAAI,CAAC,EAAE;oBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;4BACjD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BACvD,MAAM,CAAC,IAAI,CACT,wCAAU,CAAC,MAAM,CACf,KAAK,EACL,0BAA0B,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,EAC7D,gDAAkB,CAAC,KAAK,EACxB,aAAa,CACd,CACF,CAAC;4BACF,MAAM;yBACP;qBACF;iBACF;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;KACF;IAzBD,oDAyBC;IAED,SAAS,WAAW,CAAC,QAAsB,EAAE,IAAU;QACrD,MAAM,cAAc,GAAI,IAAI,CAAC,GAAY,CAAC,QAAuB,CAAC;QAClE,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;QACjD,OAAO,mCAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,SAAS,OAAO,CAAC,IAAU,EAAE,IAAU;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC"}
@@ -0,0 +1,6 @@
import { TextDocument } from 'vscode-languageserver-textdocument';
import { Diagnostic } from 'vscode-languageserver-types';
import { SingleYAMLDocument } from '../../parser/yaml-documents';
export interface AdditionalValidator {
validate(document: TextDocument, yamlDoc: SingleYAMLDocument): Diagnostic[];
}
@@ -0,0 +1,17 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Red Hat. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
});
//# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/languageservice/services/validation/types.ts"],"names":[],"mappings":"AAAA;;;gGAGgG"}
@@ -0,0 +1,8 @@
import { TextDocument } from 'vscode-languageserver-textdocument';
import { Diagnostic } from 'vscode-languageserver-types';
import { SingleYAMLDocument } from '../../parser/yaml-documents';
import { AdditionalValidator } from './types';
export declare class UnusedAnchorsValidator implements AdditionalValidator {
validate(document: TextDocument, yamlDoc: SingleYAMLDocument): Diagnostic[];
private getAnchorNode;
}
@@ -0,0 +1,105 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Red Hat. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "vscode-languageserver-types", "yaml", "../../utils/yamlAstUtils", "@vscode/l10n"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UnusedAnchorsValidator = void 0;
const vscode_languageserver_types_1 = require("vscode-languageserver-types");
const yaml_1 = require("yaml");
const yamlAstUtils_1 = require("../../utils/yamlAstUtils");
const l10n = require("@vscode/l10n");
class UnusedAnchorsValidator {
validate(document, yamlDoc) {
const result = [];
const anchors = new Set();
const usedAnchors = new Set();
const unIdentifiedAlias = new Set();
const anchorParent = new Map();
(0, yaml_1.visit)(yamlDoc.internalDocument, (key, node, path) => {
if (!(0, yaml_1.isNode)(node)) {
return;
}
if (((0, yaml_1.isCollection)(node) || (0, yaml_1.isScalar)(node)) && node.anchor) {
anchors.add(node);
anchorParent.set(node, path[path.length - 1]);
}
if ((0, yaml_1.isAlias)(node)) {
if (!node.resolve(yamlDoc.internalDocument)) {
unIdentifiedAlias.add(node);
}
else {
usedAnchors.add(node.resolve(yamlDoc.internalDocument));
}
}
});
for (const anchor of anchors) {
if (!usedAnchors.has(anchor)) {
const aToken = this.getAnchorNode(anchorParent.get(anchor), anchor);
if (aToken) {
const range = vscode_languageserver_types_1.Range.create(document.positionAt(aToken.offset), document.positionAt(aToken.offset + aToken.source.length));
const warningDiagnostic = vscode_languageserver_types_1.Diagnostic.create(range, l10n.t('Unused anchor "{0}"', aToken.source), vscode_languageserver_types_1.DiagnosticSeverity.Information, 0);
warningDiagnostic.tags = [vscode_languageserver_types_1.DiagnosticTag.Unnecessary];
result.push(warningDiagnostic);
}
}
}
unIdentifiedAlias.forEach((node) => {
const nodeRange = node.range;
if (nodeRange) {
const startOffset = nodeRange[0];
const endOffset = nodeRange[1];
const range = vscode_languageserver_types_1.Range.create(document.positionAt(startOffset), document.positionAt(endOffset));
const warningDiagnostic = vscode_languageserver_types_1.Diagnostic.create(range, l10n.t('Unresolved alias "{0}"', node.toString()), vscode_languageserver_types_1.DiagnosticSeverity.Information, 0);
warningDiagnostic.tags = [vscode_languageserver_types_1.DiagnosticTag.Unnecessary];
result.push(warningDiagnostic);
}
});
return result;
}
getAnchorNode(parentNode, node) {
if (parentNode && parentNode.srcToken) {
const token = parentNode.srcToken;
if ((0, yamlAstUtils_1.isCollectionItem)(token)) {
return getAnchorFromCollectionItem(token);
}
else if (yaml_1.CST.isCollection(token)) {
for (const t of token.items) {
if (node.srcToken !== t.value)
continue;
const anchor = getAnchorFromCollectionItem(t);
if (anchor) {
return anchor;
}
}
}
}
return undefined;
}
}
exports.UnusedAnchorsValidator = UnusedAnchorsValidator;
function getAnchorFromCollectionItem(token) {
for (const t of token.start) {
if (t.type === 'anchor') {
return t;
}
}
if (token.sep && Array.isArray(token.sep)) {
for (const t of token.sep) {
if (t.type === 'anchor') {
return t;
}
}
}
}
});
//# sourceMappingURL=unused-anchors.js.map
@@ -0,0 +1 @@
{"version":3,"file":"unused-anchors.js","sourceRoot":"","sources":["../../../../../src/languageservice/services/validation/unused-anchors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
import { TextDocument } from 'vscode-languageserver-textdocument';
import { Diagnostic } from 'vscode-languageserver-types';
import { SingleYAMLDocument } from '../../parser/yaml-documents';
import { LanguageSettings } from '../../yamlLanguageService';
import { AdditionalValidator } from './types';
export declare class YAMLStyleValidator implements AdditionalValidator {
private forbidSequence;
private forbidMapping;
constructor(settings: LanguageSettings);
validate(document: TextDocument, yamlDoc: SingleYAMLDocument): Diagnostic[];
private getRangeOf;
}
@@ -0,0 +1,42 @@
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "vscode-languageserver-types", "yaml", "@vscode/l10n"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.YAMLStyleValidator = void 0;
const vscode_languageserver_types_1 = require("vscode-languageserver-types");
const yaml_1 = require("yaml");
const l10n = require("@vscode/l10n");
class YAMLStyleValidator {
constructor(settings) {
this.forbidMapping = settings.flowMapping === 'forbid';
this.forbidSequence = settings.flowSequence === 'forbid';
}
validate(document, yamlDoc) {
const result = [];
(0, yaml_1.visit)(yamlDoc.internalDocument, (key, node) => {
if (this.forbidMapping && (0, yaml_1.isMap)(node) && node.srcToken?.type === 'flow-collection') {
result.push(vscode_languageserver_types_1.Diagnostic.create(this.getRangeOf(document, node.srcToken), l10n.t('Flow style mapping is forbidden'), vscode_languageserver_types_1.DiagnosticSeverity.Error, 'flowMap'));
}
if (this.forbidSequence && (0, yaml_1.isSeq)(node) && node.srcToken?.type === 'flow-collection') {
result.push(vscode_languageserver_types_1.Diagnostic.create(this.getRangeOf(document, node.srcToken), l10n.t('Flow style sequence is forbidden'), vscode_languageserver_types_1.DiagnosticSeverity.Error, 'flowSeq'));
}
});
return result;
}
getRangeOf(document, node) {
const endOffset = node.end[0].offset;
let endPosition = document.positionAt(endOffset);
endPosition = { character: endPosition.character + 1, line: endPosition.line };
return vscode_languageserver_types_1.Range.create(document.positionAt(node.start.offset), endPosition);
}
}
exports.YAMLStyleValidator = YAMLStyleValidator;
});
//# sourceMappingURL=yaml-style.js.map
@@ -0,0 +1 @@
{"version":3,"file":"yaml-style.js","sourceRoot":"","sources":["../../../../../src/languageservice/services/validation/yaml-style.ts"],"names":[],"mappings":";;;;;;;;;;;;IACA,6EAAoF;IACpF,+BAA2C;IAK3C,qCAAqC;IAErC,MAAa,kBAAkB;QAI7B,YAAY,QAA0B;YACpC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC;YACvD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,YAAY,KAAK,QAAQ,CAAC;QAC3D,CAAC;QACD,QAAQ,CAAC,QAAsB,EAAE,OAA2B;YAC1D,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,IAAA,YAAK,EAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC5C,IAAI,IAAI,CAAC,aAAa,IAAI,IAAA,YAAK,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,iBAAiB,EAAE;oBAClF,MAAM,CAAC,IAAI,CACT,wCAAU,CAAC,MAAM,CACf,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EACxC,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,EACzC,gDAAkB,CAAC,KAAK,EACxB,SAAS,CACV,CACF,CAAC;iBACH;gBACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAA,YAAK,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,iBAAiB,EAAE;oBACnF,MAAM,CAAC,IAAI,CACT,wCAAU,CAAC,MAAM,CACf,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EACxC,IAAI,CAAC,CAAC,CAAC,kCAAkC,CAAC,EAC1C,gDAAkB,CAAC,KAAK,EACxB,SAAS,CACV,CACF,CAAC;iBACH;YACH,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAEO,UAAU,CAAC,QAAsB,EAAE,IAAoB;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACrC,IAAI,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACjD,WAAW,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;YAC/E,OAAO,mCAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;QAC3E,CAAC;KACF;IAzCD,gDAyCC"}