chore: add logic for scripts
ci-agent / build (push) Failing after 2m58s

This commit is contained in:
d3m0k1d
2026-04-05 02:18:34 +03:00
parent 3e5e4815d9
commit aae27fa5e0
5 changed files with 1179 additions and 44 deletions
+378 -17
View File
@@ -965,12 +965,7 @@ const docTemplate = `{
},
"/jobs": {
"post": {
"security": [
{
"Bearer": []
}
],
"description": "Sends a command to the specified agent, waits for execution, and returns the result",
"description": "Sends a command to the specified agent and returns a URL to wait for the result",
"consumes": [
"application/json"
],
@@ -980,7 +975,7 @@ const docTemplate = `{
"tags": [
"jobs"
],
"summary": "Create and run a job on an agent",
"summary": "Submit a job to an agent",
"parameters": [
{
"description": "Job request",
@@ -1002,6 +997,148 @@ const docTemplate = `{
}
}
},
"/jobs/check_cmd": {
"post": {
"description": "Validates that a command binary exists on the system",
"consumes": [
"application/json"
],
"tags": [
"jobs"
],
"summary": "Check command path",
"parameters": [
{
"description": "Command to check",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/internal_handlers.CheckCmdIn"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/internal_handlers.CheckCmdOut"
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/jobs/metrics": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "Returns total, successful, failed, and pending job counts over the given period",
"produces": [
"application/json"
],
"tags": [
"jobs"
],
"summary": "Get job metrics",
"parameters": [
{
"type": "string",
"default": "24h",
"description": "Time period (e.g. 1h, 24h, 7d)",
"name": "period",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/internal_handlers.JobMetricsOut"
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/jobs/{id}/wait": {
"post": {
"description": "Long-polls for a job result. Returns immediately if the job is already finished.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"jobs"
],
"summary": "Wait for job result",
"parameters": [
{
"type": "integer",
"description": "Job ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "Agent reference",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/internal_handlers.WaitJobIn"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/internal_handlers.JobResult"
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/logs": {
"get": {
"security": [
@@ -1580,6 +1717,138 @@ const docTemplate = `{
}
}
},
"/scripts/by-path": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "Returns a script by its full path (e.g. 'deploy/nginx/restart.sh')",
"produces": [
"application/json"
],
"tags": [
"scripts"
],
"summary": "Get script by path",
"parameters": [
{
"type": "string",
"description": "Script path",
"name": "path",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/gitea_d3m0k1d_ru_d3m0k1d_HellreigN_backend_internal_repository.Script"
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/scripts/folder": {
"post": {
"security": [
{
"Bearer": []
}
],
"description": "Creates a virtual folder by creating a placeholder script with the folder path",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"scripts"
],
"summary": "Create folder",
"parameters": [
{
"description": "Folder path",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/internal_handlers.CreateFolderRequest"
}
}
],
"responses": {
"201": {
"description": "Folder created",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
},
"delete": {
"security": [
{
"Bearer": []
}
],
"description": "Deletes all scripts that start with the given folder path",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"scripts"
],
"summary": "Delete folder",
"parameters": [
{
"description": "Folder path",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/internal_handlers.DeleteFolderRequest"
}
}
],
"responses": {
"200": {
"description": "Folder deleted with count of deleted scripts",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/scripts/interpreters": {
"get": {
"security": [
@@ -2337,16 +2606,7 @@ const docTemplate = `{
"id": {
"type": "integer"
},
"status": {
"type": "integer"
},
"stderr": {
"type": "string"
},
"stdin": {
"type": "string"
},
"stdout": {
"wait_url": {
"type": "string"
}
}
@@ -2382,6 +2642,50 @@ const docTemplate = `{
}
}
},
"internal_handlers.CheckCmdIn": {
"type": "object",
"required": [
"command"
],
"properties": {
"command": {
"type": "string",
"example": "bash"
}
}
},
"internal_handlers.CheckCmdOut": {
"type": "object",
"properties": {
"exists": {
"type": "boolean"
}
}
},
"internal_handlers.CreateFolderRequest": {
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"example": "deploy/nginx"
}
}
},
"internal_handlers.DeleteFolderRequest": {
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"example": "deploy/nginx"
}
}
},
"internal_handlers.InsertLogRequest": {
"type": "object",
"required": [
@@ -2422,6 +2726,52 @@ const docTemplate = `{
}
}
},
"internal_handlers.JobMetricsOut": {
"type": "object",
"properties": {
"failed": {
"type": "integer"
},
"pending": {
"type": "integer"
},
"period": {
"type": "string"
},
"success": {
"type": "integer"
},
"total": {
"type": "integer"
}
}
},
"internal_handlers.JobResult": {
"type": "object",
"properties": {
"command": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"type": "integer"
},
"status": {
"type": "integer"
},
"stderr": {
"type": "string"
},
"stdin": {
"type": "string"
},
"stdout": {
"type": "string"
}
}
},
"internal_handlers.RegisterRequest": {
"type": "object",
"required": [
@@ -2509,6 +2859,17 @@ const docTemplate = `{
"type": "string"
}
}
},
"internal_handlers.WaitJobIn": {
"type": "object",
"required": [
"agent_id"
],
"properties": {
"agent_id": {
"type": "string"
}
}
}
},
"securityDefinitions": {
+378 -17
View File
@@ -954,12 +954,7 @@
},
"/jobs": {
"post": {
"security": [
{
"Bearer": []
}
],
"description": "Sends a command to the specified agent, waits for execution, and returns the result",
"description": "Sends a command to the specified agent and returns a URL to wait for the result",
"consumes": [
"application/json"
],
@@ -969,7 +964,7 @@
"tags": [
"jobs"
],
"summary": "Create and run a job on an agent",
"summary": "Submit a job to an agent",
"parameters": [
{
"description": "Job request",
@@ -991,6 +986,148 @@
}
}
},
"/jobs/check_cmd": {
"post": {
"description": "Validates that a command binary exists on the system",
"consumes": [
"application/json"
],
"tags": [
"jobs"
],
"summary": "Check command path",
"parameters": [
{
"description": "Command to check",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/internal_handlers.CheckCmdIn"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/internal_handlers.CheckCmdOut"
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/jobs/metrics": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "Returns total, successful, failed, and pending job counts over the given period",
"produces": [
"application/json"
],
"tags": [
"jobs"
],
"summary": "Get job metrics",
"parameters": [
{
"type": "string",
"default": "24h",
"description": "Time period (e.g. 1h, 24h, 7d)",
"name": "period",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/internal_handlers.JobMetricsOut"
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/jobs/{id}/wait": {
"post": {
"description": "Long-polls for a job result. Returns immediately if the job is already finished.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"jobs"
],
"summary": "Wait for job result",
"parameters": [
{
"type": "integer",
"description": "Job ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "Agent reference",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/internal_handlers.WaitJobIn"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/internal_handlers.JobResult"
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/logs": {
"get": {
"security": [
@@ -1569,6 +1706,138 @@
}
}
},
"/scripts/by-path": {
"get": {
"security": [
{
"Bearer": []
}
],
"description": "Returns a script by its full path (e.g. 'deploy/nginx/restart.sh')",
"produces": [
"application/json"
],
"tags": [
"scripts"
],
"summary": "Get script by path",
"parameters": [
{
"type": "string",
"description": "Script path",
"name": "path",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/gitea_d3m0k1d_ru_d3m0k1d_HellreigN_backend_internal_repository.Script"
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/scripts/folder": {
"post": {
"security": [
{
"Bearer": []
}
],
"description": "Creates a virtual folder by creating a placeholder script with the folder path",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"scripts"
],
"summary": "Create folder",
"parameters": [
{
"description": "Folder path",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/internal_handlers.CreateFolderRequest"
}
}
],
"responses": {
"201": {
"description": "Folder created",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
},
"delete": {
"security": [
{
"Bearer": []
}
],
"description": "Deletes all scripts that start with the given folder path",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"scripts"
],
"summary": "Delete folder",
"parameters": [
{
"description": "Folder path",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/internal_handlers.DeleteFolderRequest"
}
}
],
"responses": {
"200": {
"description": "Folder deleted with count of deleted scripts",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/scripts/interpreters": {
"get": {
"security": [
@@ -2326,16 +2595,7 @@
"id": {
"type": "integer"
},
"status": {
"type": "integer"
},
"stderr": {
"type": "string"
},
"stdin": {
"type": "string"
},
"stdout": {
"wait_url": {
"type": "string"
}
}
@@ -2371,6 +2631,50 @@
}
}
},
"internal_handlers.CheckCmdIn": {
"type": "object",
"required": [
"command"
],
"properties": {
"command": {
"type": "string",
"example": "bash"
}
}
},
"internal_handlers.CheckCmdOut": {
"type": "object",
"properties": {
"exists": {
"type": "boolean"
}
}
},
"internal_handlers.CreateFolderRequest": {
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"example": "deploy/nginx"
}
}
},
"internal_handlers.DeleteFolderRequest": {
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"example": "deploy/nginx"
}
}
},
"internal_handlers.InsertLogRequest": {
"type": "object",
"required": [
@@ -2411,6 +2715,52 @@
}
}
},
"internal_handlers.JobMetricsOut": {
"type": "object",
"properties": {
"failed": {
"type": "integer"
},
"pending": {
"type": "integer"
},
"period": {
"type": "string"
},
"success": {
"type": "integer"
},
"total": {
"type": "integer"
}
}
},
"internal_handlers.JobResult": {
"type": "object",
"properties": {
"command": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"type": "integer"
},
"status": {
"type": "integer"
},
"stderr": {
"type": "string"
},
"stdin": {
"type": "string"
},
"stdout": {
"type": "string"
}
}
},
"internal_handlers.RegisterRequest": {
"type": "object",
"required": [
@@ -2498,6 +2848,17 @@
"type": "string"
}
}
},
"internal_handlers.WaitJobIn": {
"type": "object",
"required": [
"agent_id"
],
"properties": {
"agent_id": {
"type": "string"
}
}
}
},
"securityDefinitions": {
+246 -10
View File
@@ -348,13 +348,7 @@ definitions:
type: array
id:
type: integer
status:
type: integer
stderr:
type: string
stdin:
type: string
stdout:
wait_url:
type: string
type: object
internal_handlers.AgentInfo:
@@ -380,6 +374,35 @@ definitions:
example: agent-001
type: string
type: object
internal_handlers.CheckCmdIn:
properties:
command:
example: bash
type: string
required:
- command
type: object
internal_handlers.CheckCmdOut:
properties:
exists:
type: boolean
type: object
internal_handlers.CreateFolderRequest:
properties:
path:
example: deploy/nginx
type: string
required:
- path
type: object
internal_handlers.DeleteFolderRequest:
properties:
path:
example: deploy/nginx
type: string
required:
- path
type: object
internal_handlers.InsertLogRequest:
properties:
agent:
@@ -407,6 +430,36 @@ definitions:
required:
- logs
type: object
internal_handlers.JobMetricsOut:
properties:
failed:
type: integer
pending:
type: integer
period:
type: string
success:
type: integer
total:
type: integer
type: object
internal_handlers.JobResult:
properties:
command:
items:
type: string
type: array
id:
type: integer
status:
type: integer
stderr:
type: string
stdin:
type: string
stdout:
type: string
type: object
internal_handlers.RegisterRequest:
properties:
csr:
@@ -465,6 +518,13 @@ definitions:
required:
- token
type: object
internal_handlers.WaitJobIn:
properties:
agent_id:
type: string
required:
- agent_id
type: object
info:
contact: {}
paths:
@@ -1079,8 +1139,8 @@ paths:
post:
consumes:
- application/json
description: Sends a command to the specified agent, waits for execution, and
returns the result
description: Sends a command to the specified agent and returns a URL to wait
for the result
parameters:
- description: Job request
in: body
@@ -1095,9 +1155,101 @@ paths:
description: Created
schema:
$ref: '#/definitions/internal_handlers.AddJobOut'
summary: Submit a job to an agent
tags:
- jobs
/jobs/{id}/wait:
post:
consumes:
- application/json
description: Long-polls for a job result. Returns immediately if the job is
already finished.
parameters:
- description: Job ID
in: path
name: id
required: true
type: integer
- description: Agent reference
in: body
name: body
required: true
schema:
$ref: '#/definitions/internal_handlers.WaitJobIn'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/internal_handlers.JobResult'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
summary: Wait for job result
tags:
- jobs
/jobs/check_cmd:
post:
consumes:
- application/json
description: Validates that a command binary exists on the system
parameters:
- description: Command to check
in: body
name: body
required: true
schema:
$ref: '#/definitions/internal_handlers.CheckCmdIn'
responses:
"200":
description: OK
schema:
$ref: '#/definitions/internal_handlers.CheckCmdOut'
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
summary: Check command path
tags:
- jobs
/jobs/metrics:
get:
description: Returns total, successful, failed, and pending job counts over
the given period
parameters:
- default: 24h
description: Time period (e.g. 1h, 24h, 7d)
in: query
name: period
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/internal_handlers.JobMetricsOut'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
security:
- Bearer: []
summary: Create and run a job on an agent
summary: Get job metrics
tags:
- jobs
/logs:
@@ -1468,6 +1620,90 @@ paths:
summary: Run script by ID
tags:
- scripts
/scripts/by-path:
get:
description: Returns a script by its full path (e.g. 'deploy/nginx/restart.sh')
parameters:
- description: Script path
in: query
name: path
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/gitea_d3m0k1d_ru_d3m0k1d_HellreigN_backend_internal_repository.Script'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"404":
description: Not Found
schema:
additionalProperties:
type: string
type: object
security:
- Bearer: []
summary: Get script by path
tags:
- scripts
/scripts/folder:
delete:
consumes:
- application/json
description: Deletes all scripts that start with the given folder path
parameters:
- description: Folder path
in: body
name: body
required: true
schema:
$ref: '#/definitions/internal_handlers.DeleteFolderRequest'
produces:
- application/json
responses:
"200":
description: Folder deleted with count of deleted scripts
schema:
additionalProperties: true
type: object
security:
- Bearer: []
summary: Delete folder
tags:
- scripts
post:
consumes:
- application/json
description: Creates a virtual folder by creating a placeholder script with
the folder path
parameters:
- description: Folder path
in: body
name: body
required: true
schema:
$ref: '#/definitions/internal_handlers.CreateFolderRequest'
produces:
- application/json
responses:
"201":
description: Folder created
schema:
additionalProperties:
type: string
type: object
security:
- Bearer: []
summary: Create folder
tags:
- scripts
/scripts/interpreters:
get:
description: Returns all script interpreters available in the system