1 Commits
Author SHA1 Message Date
alu f5299cb5b1 add static analysis action 2026-07-29 17:54:13 +00:00
17 changed files with 146 additions and 77 deletions
+32
View File
@@ -0,0 +1,32 @@
name: ProxmoxAAS-Dashboard Go Static Analysis Check
run-name: Go static analysis check on ${{ gitea.repository }} ${{ gitea.ref_name }} ${{ gitea.sha }}
on:
push:
branches:
- "*"
jobs:
lint-check:
runs-on: ubuntu-latest
steps:
- name: Check Out Repository
uses: actions/checkout@v4
- name: Initialize Runner
uses: actions/setup-go@v7
with:
go-version-file: 'go.mod'
- name: Initialize Go
run: make build-web
run: go get .
- name: Run Go Vet
id: static_govet
if: always()
run: go vet ./...
- name: Verify Static Analysis
if: >
steps.static_govet.outcome != 'success'
run: exit 1
+57
View File
@@ -0,0 +1,57 @@
name: ProxmoxAAS-Dashboard Code Style Check
run-name: Code style check on ${{ gitea.repository }} ${{ gitea.ref_name }} ${{ gitea.sha }}
on:
push:
branches:
- "*"
jobs:
lint-check:
runs-on: ubuntu-latest
steps:
- name: Check Out Repository
uses: actions/checkout@v4
- name: Initialize Runner
uses: actions/setup-node@v4
- name: Install Linters
run: |
npm install --no-save \
@eslint/eslintrc \
@eslint/js \
eslint \
globals \
html-validate \
stylelint \
stylelint-config-standard
- name: Verify Linters
run: |
npx html-validate --version
npx stylelint --version
npx eslint --version
- name: Run HTMLValidate
id: html_lint
run: npx html-validate --config dev_config/.htmlvalidate.json "web/html/**/*"
- name: Run Stylelint
id: style_lint
if: always()
run: npx stylelint --config dev_config/.stylelintrc.json --formatter verbose --fix "web/css/**/*.css"
- name: Run ESLint
id: js_lint
if: always()
env:
DEBUG: eslint:cli-engine
run: npx eslint --config dev_config/eslint.config.mjs --fix web/scripts/
- name: Verify Linters
if: always()
if: >
steps.html_lint.outcome != 'success' ||
steps.style_lint.outcome != 'success' ||
steps.js_lint.outcome != 'success'
run: exit 1
+2
View File
@@ -1,3 +1,5 @@
**/config.json
**/package-lock.json
**/node_modules
dist/*
go.sum
+4 -7
View File
@@ -1,10 +1,13 @@
.PHONY: build build-web build-wfa-js clean clean-wfa-js ensure-dist workflow-init
.PHONY: build test clean wfa-js
build: clean ensure-dist build-web build-wfa-js
@echo "======================== Building Binary ======================="
# resolve symbolic links in web by copying it into dist/web/
CGO_ENABLED=0 go build -tags release -ldflags="-s -w" -v -o dist/ .
ensure-dist:
mkdir -p dist
build-web: ensure-dist
cp -rL web/ dist/web/
@@ -19,9 +22,3 @@ clean: clean-wfa-js
clean-wfa-js:
$(MAKE) clean -C WFA-JS
ensure-dist:
mkdir -p dist
workflow-init: ensure-dist build-web
cp -r dev_config/. .
+1 -1
View File
@@ -13,7 +13,7 @@ ProxmoxAAS Dashboard provides users of a proxmox based compute on demand service
## ProxmoxAAS System Installation Overview
The ProxmoxAAS project is large and is split into multiple components. There are four required components, the Dashboard, API, Fabric, and access-manager-api. The installation order should start with the Dashboard and then proceed to the other backend components. This will require some foresight into the setup process.
The ProxmoxAAS project is large and is split into multiple components. There are four required components, the Dashboard, API, Fabric, and access-manager-api. The instalation order should start with the Dashboard and then proceed to the other backend components. This will require some foresight into the setup process.
The supported setup is to use a reverse proxy to serve both the original Proxmox web interface and ProxmoxAAS components. It is possible other setups can work. Rather than provide specific steps to duplicate a certain setup, the steps included are intended as a guideline of steps required for proper function in most setups. Consequently, the examples provided are only to highlight key settings and do not represent complete working configurations. The instructions also assume you have your own domain name which will substitute `domain.net` in some of the configs.
+2 -4
View File
@@ -6,7 +6,7 @@ import (
"log"
"proxmoxaas-dashboard/app/common"
"proxmoxaas-dashboard/app/routes"
"web" // go will complain here until the first build
"proxmoxaas-dashboard/dist/web" // go will complain here until the first build
"github.com/gin-gonic/gin"
"github.com/tdewolff/minify/v2"
@@ -18,11 +18,9 @@ func Run() {
common.Global = common.GetConfig(*configPath)
// setup gin
// setup static resources
gin.SetMode(gin.ReleaseMode)
router := gin.Default()
// setup static resources
m := common.InitMinify()
ServeStatic(router, m)
html := common.MinifyStatic(m, web.Templates)
-3
View File
@@ -1,3 +0,0 @@
web/modules/*
WFA-JS/*
dist/*
-3
View File
@@ -1,3 +0,0 @@
web/modules/*
WFA-JS/*
dist/*
+25 -29
View File
@@ -1,33 +1,29 @@
import { defineConfig, globalIgnores } from "eslint/config";
import { defineConfig } from "eslint/config";
import globals from "globals";
import js from "@eslint/js";
export default defineConfig([
js.configs.recommended,
globalIgnores(["dist/", "web/modules", "WFA-JS"]),
{
languageOptions: {
globals: {
...globals.browser,
},
ecmaVersion: "latest",
sourceType: "module",
export default defineConfig([js.configs.recommended,{
languageOptions: {
globals: {
...globals.browser,
},
rules: {
"no-tabs": ["error", {
allowIndentationTabs: true,
}],
indent: ["error", "tab"],
"linebreak-style": ["error", "unix"],
quotes: ["error", "double"],
semi: ["error", "always"],
"brace-style": ["error", "stroustrup", { allowSingleLine: false }],
"no-unused-vars": ["warn", {
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_",
"caughtErrorsIgnorePattern": "^_"
}],
"prefer-const": ["error"]
},
}
]);
ecmaVersion: "latest",
sourceType: "module",
},
rules: {
"no-tabs": ["error", {
allowIndentationTabs: true,
}],
indent: ["error", "tab"],
"linebreak-style": ["error", "unix"],
quotes: ["error", "double"],
semi: ["error", "always"],
"brace-style": ["error", "stroustrup", { allowSingleLine: false }],
"no-unused-vars": ["warn", {
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_",
"caughtErrorsIgnorePattern": "^_"
}],
"prefer-const": ["error"]
},
}]);
+15 -18
View File
@@ -1,26 +1,23 @@
module proxmoxaas-dashboard
go 1.27.0
go 1.26.5
require (
github.com/gerow/go-color v0.0.0-20140219113758-125d37f527f1
github.com/gin-gonic/gin v1.12.0
github.com/go-viper/mapstructure/v2 v2.5.0
github.com/tdewolff/minify/v2 v2.24.17
github.com/tdewolff/minify/v2 v2.24.13
proxmoxaas-common-lib v0.0.0
web v0.0.0
)
replace proxmoxaas-common-lib => ./proxmoxaas-common-lib
replace web => ./dist/web
require (
github.com/bytedance/gopkg v0.1.4 // indirect
github.com/bytedance/sonic v1.15.2 // indirect
github.com/bytedance/sonic/loader v0.5.2 // indirect
github.com/bytedance/sonic/loader v0.5.1 // indirect
github.com/cloudwego/base64x v0.1.7 // indirect
github.com/gabriel-vasile/mimetype v1.4.15 // indirect
github.com/gabriel-vasile/mimetype v1.4.13 // indirect
github.com/gin-contrib/sse v1.1.1 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
@@ -29,21 +26,21 @@ require (
github.com/goccy/go-yaml v1.19.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.4.0 // indirect
github.com/leodido/go-urn v1.5.0 // indirect
github.com/mattn/go-isatty v0.0.24 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-isatty v0.0.23 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.4.3 // indirect
github.com/quic-go/qpack v0.6.0 // indirect
github.com/quic-go/quic-go v0.61.0 // indirect
github.com/tdewolff/parse/v2 v2.8.16 // indirect
github.com/quic-go/quic-go v0.60.0 // indirect
github.com/tdewolff/parse/v2 v2.8.13 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.3.2 // indirect
go.mongodb.org/mongo-driver/v2 v2.8.1 // indirect
golang.org/x/arch v0.30.0 // indirect
golang.org/x/crypto v0.55.0 // indirect
golang.org/x/net v0.58.0 // indirect
github.com/ugorji/go/codec v1.3.1 // indirect
go.mongodb.org/mongo-driver/v2 v2.8.0 // indirect
golang.org/x/arch v0.29.0 // indirect
golang.org/x/crypto v0.54.0 // indirect
golang.org/x/net v0.57.0 // indirect
golang.org/x/sys v0.47.0 // indirect
golang.org/x/text v0.41.0 // indirect
google.golang.org/protobuf v1.36.12 // indirect
golang.org/x/text v0.40.0 // indirect
google.golang.org/protobuf v1.36.11 // indirect
)
+3 -3
View File
@@ -191,18 +191,18 @@ hr {
}
/* add hide large class similar to w3-hide-medium and w3-hide-small */
@media screen and (width >= 993px) {
@media screen and (width >=993px) {
.hide-large {display: none !important;}
}
/* fixes edge case in w3-hide-medium where width between 992 and 993 */
@media screen and (width <= 993px) and (width >= 601px){
@media screen and (width <=993px) and (width >=601px){
.hide-large {display: none !important;}
.hide-medium {display:none !important}
}
/* fixes edge case in w3-hide-small when width between 600 and 601 */
@media screen and (width <= 601px) and (width >= 440px) {
@media screen and (width <=601px) {
.hide-large {display: none !important;}
.hide-medium {display:none !important}
.hide-small {display:none !important}
-3
View File
@@ -1,3 +0,0 @@
module web
go 1.26.0
+1 -1
View File
@@ -65,7 +65,7 @@
</div>
<div id="controls" class="w3-center w3-container">
<button id="cancel" type="submit" value="cancel" form="form" class="w3-button w3-margin" formnovalidate>CANCEL</button>
<button id="confirm" type="submit" value="confirm" form="form" class="w3-button w3-margin">CONFIRM</button>
<button id="confirm" type="submit" value="confirm" form="form" class="w3-button w3-margin" >CONFIRM</button>
</div>
</dialog>
</template>
+1 -1
View File
@@ -96,7 +96,7 @@ class ErrorDialog extends HTMLElement {
}
navigator.clipboard.writeText(errors);
}
this.dialog.close();
this.parentElement.removeChild(this);
});
}
-1
View File
@@ -6,7 +6,6 @@ window.addEventListener("DOMContentLoaded", init);
async function init () {
await deleteAllCookies();
setAppearance();
const formSubmitButton = document.querySelector("#submit");
formSubmitButton.addEventListener("click", async (e) => {
e.preventDefault();
+2 -2
View File
@@ -1,4 +1,4 @@
{{/* <head> common across all pages */}}
{{/* <head> common across all pages*/}}
{{define "head"}}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -15,7 +15,7 @@
<link rel="stylesheet" href="css/form.css">
{{end}}
{{/* <header> common across all pages */}}
{{/* <header> common across all pages*/}}
{{define "header"}}
<header>
<h1>{{.global.Organization}}</h1>