Compare commits

..

No commits in common. "main" and "v1.0.0" have entirely different histories.
main ... v1.0.0

4 changed files with 37 additions and 42 deletions

View File

@ -14,14 +14,20 @@ The action builds a JSON array with a single object from the issue event:
[
{
"task_id": 123,
"title": "Issue Title",
"body": "Issue body/description",
"state": "open",
"author": "jdoe",
"assignees": ["alice", "bob"],
"labels": ["bug", "backend"],
"date_deadline": "2025-05-06"
}
]
```
- `task_id`: from `${{ gitea.event.issue.number }}`
- `title`: from `${{ gitea.event.issue.title }}`
- `body`: from `${{ gitea.event.issue.body }}`
- `state`: from `${{ gitea.event.issue.state }}` ("open" or "closed")
- `author`: from `${{ gitea.event.issue.user.login }}`
- `assignees`: from `${{ join(gitea.event.issue.assignees.*.login, ',') }}` (expanded and split)

View File

@ -10,17 +10,17 @@ inputs:
base_url:
description: 'Base URL of the FastAPI server.'
required: true
auth_token:
description: 'Bearer token for authenticating to the FastAPI server.'
required: true
runs:
using: 'docker'
image: 'Dockerfile'
env:
BASE_URL: ${{ inputs.base_url }}
AUTH_TOKEN: ${{ inputs.auth_token }}
BRANCH_REF: ${{ gitea.event.issue.ref }}
ISSUE_NUMBER: ${{ gitea.event.issue.number }}
ISSUE_TITLE: ${{ gitea.event.issue.title }}
ISSUE_BODY: ${{ gitea.event.issue.body }}
ISSUE_STATE: ${{ gitea.event.issue.state }}
ISSUE_AUTHOR: ${{ gitea.event.issue.user.login }}
ISSUE_ASSIGNEES: ${{ join(gitea.event.issue.assignees.*.login, ',') }}
ISSUE_LABELS: ${{ join(gitea.event.issue.labels.*.name, ',') }}
ISSUE_DUE_DATE: ${{ gitea.event.issue.due_date }}

0
go.sum
View File

53
main.go
View File

@ -13,8 +13,12 @@ import (
type Payload struct {
TaskID int64 `json:"task_id"`
Title string `json:"title"`
Body string `json:"body"`
State string `json:"state"`
UserIDs []string `json:"user_ids"`
Author string `json:"author"`
Assignees []string `json:"assignees"`
Labels []string `json:"labels"`
DueDate string `json:"date_deadline,omitempty"`
}
@ -50,33 +54,29 @@ func main() {
logger := log.New(io.MultiWriter(os.Stdout, logFile), "", log.LstdFlags)
// Build payload from env
issueNumber := os.Getenv("ISSUE_NUMBER")
issueTitle := os.Getenv("ISSUE_TITLE")
issueBody := os.Getenv("ISSUE_BODY")
issueState := os.Getenv("ISSUE_STATE")
issueAuthor := os.Getenv("ISSUE_AUTHOR")
issueAssignees := splitCSV(os.Getenv("ISSUE_ASSIGNEES"))
issueLabels := splitCSV(os.Getenv("ISSUE_LABELS"))
issueDueDate := os.Getenv("ISSUE_DUE_DATE")
branchRef := os.Getenv("BRANCH_REF")
authToken := os.Getenv("AUTH_TOKEN")
if strings.TrimSpace(authToken) == "" {
logger.Println("AUTH_TOKEN not provided. Please pass 'auth_token' input mapped to a secret.")
os.Exit(1)
}
var odooTicketNumber int64
if branchRef != "" {
// Expect format: <prefix>/ticket-OdooTicketNumber
parts := strings.Split(branchRef, "/")
for _, part := range parts {
if strings.HasPrefix(part, "ticket-") {
ticketStr := strings.TrimPrefix(part, "ticket-")
fmt.Sscanf(ticketStr, "%d", &odooTicketNumber)
break
}
}
var taskID int64
if issueNumber != "" {
// Best-effort parse; if it fails, taskID remains 0
fmt.Sscanf(issueNumber, "%d", &taskID)
}
payload := Payload{
TaskID: odooTicketNumber,
TaskID: taskID,
Title: issueTitle,
Body: issueBody,
State: issueState,
UserIDs: issueAssignees,
Author: issueAuthor,
Assignees: issueAssignees,
Labels: issueLabels,
DueDate: issueDueDate,
}
@ -87,15 +87,7 @@ func main() {
}
endpoint := strings.TrimRight(baseURL, "/") + "/api/v1/patch_gitea_odoo"
req, err := http.NewRequest(http.MethodPatch, endpoint, bytes.NewBuffer(payloadBytes))
if err != nil {
logger.Printf("Error creating HTTP request: %v\n", err)
os.Exit(1)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+authToken)
resp, err := http.DefaultClient.Do(req)
resp, err := http.Post(endpoint, "application/json", bytes.NewBuffer(payloadBytes))
if err != nil {
logger.Printf("HTTP request failed: %v\n", err)
os.Exit(1)
@ -103,9 +95,6 @@ func main() {
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
logger.Printf("Status: %s\nResponse: %s\n", resp.Status, string(body))
if resp.StatusCode == http.StatusUnauthorized || resp.StatusCode == http.StatusForbidden {
logger.Println("Authentication to FastAPI failed. Check FASTAPI token.")
}
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
os.Exit(1)
}