Skip to content

[Semaphore] Add Get Pipeline Component#3081

Open
ainiroadmike-openclaw wants to merge 3 commits intosuperplanehq:mainfrom
ainiroadmike-openclaw:feature/semaphore-get-pipeline
Open

[Semaphore] Add Get Pipeline Component#3081
ainiroadmike-openclaw wants to merge 3 commits intosuperplanehq:mainfrom
ainiroadmike-openclaw:feature/semaphore-get-pipeline

Conversation

@ainiroadmike-openclaw
Copy link

Summary

Adds Get Pipeline component to fetch Semaphore pipeline status by ID.

Changes

  • New action component: semaphore.getPipeline
  • Fetches pipeline state, result, and metadata by ID
  • Enables workflow branching on pipeline status
  • Comprehensive validation and tests

Configuration

  • Pipeline ID (required): Semaphore pipeline ID from Run Workflow output or event data

Output

  • name: Pipeline name
  • ppl_id: Pipeline ID
  • wf_id: Workflow ID
  • state: Current state (running, done)
  • result: Result (passed, failed, stopped, canceled)

Use Cases

  • Poll pipeline status after Run Workflow
  • Verify build results before deploy
  • Branch workflows based on pipeline state or result
  • Status checks in multi-step workflows

Testing

  • Validation tests for required fields
  • Configuration tests
  • Output channel tests

Closes #2827


Demo video will be added after initial review.

ainiroadmike-openclaw added 3 commits February 13, 2026 00:14
Implements a new component to retrieve billable GitHub Actions usage for orgs and repos.

- Adds Get Workflow Usage action component
- Supports org-wide and per-repo usage queries
- Filters by time range (year/month/day) and runner OS/SKU
- Returns total minutes and breakdown by OS
- Updates GitHub App manifest to request admin:read permission for billing API access

Fixes superplanehq#2277
Implements Linear project management integration for SuperPlane.

Features:
- Personal API key authentication
- GraphQL client for Linear API
- Create Issue action component
- On Issue Created trigger with team/label filtering
- Webhook handler for Linear events
- Team resource listing
- Comprehensive tests

Components:
- linear.createIssue: Create issues with team, title, description, assignee, priority, state, labels
- linear.onIssueCreated: Trigger workflows on new issue creation

Fixes superplanehq#2485
Implements pipeline status fetching for Semaphore CI/CD.

Features:
- Fetch pipeline by ID
- Returns name, pipeline ID, workflow ID, state, and result
- Enables workflow branching based on pipeline state/result
- Comprehensive validation and tests

Use cases:
- Status polling after Run Workflow
- Result verification from event data
- Conditional workflows based on build status

Fixes superplanehq#2827
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 5 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

This is the final PR Bugbot will review for you during this billing cycle

Your free Bugbot reviews will reset on March 12

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

Type: "repository",
Search: true,
Multi: true,
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Repository selector uses wrong value type

High Severity

repositories is configured as an integration resource without UseNameAsValue, but Execute treats each selected value as a repository name in the /repos/{owner}/{repo} path. The resource system returns repository IDs by default, so repo-scoped requests are built with IDs and fail.

Additional Locations (1)

Fix in Cursor Fix in Web

}

usageData.MinutesUsed = response.TotalPaidMinutesUsed
usageData.TotalPaidMinutes = response.TotalPaidMinutesUsed
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minutes output duplicates paid minutes

Medium Severity

minutes_used is assigned from TotalPaidMinutesUsed instead of TotalMinutesUsed, while total_paid_minutes is also set from paid minutes. This collapses two different metrics into one and returns incorrect usage values for minutes_used.

Additional Locations (1)

Fix in Cursor Fix in Web

}

if _, err := client.Do(context.Background(), req, &response); err != nil {
continue
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Repo fetch failures are silently ignored

Medium Severity

Per-repository errors in request creation and API execution are swallowed with continue, so Execute can return success with partial or empty usage data. This hides invalid repositories and transient API failures from workflow logic.

Additional Locations (1)

Fix in Cursor Fix in Web

ctx.Integration.EmitEvent(core.IntegrationEvent{
Type: "webhook",
Metadata: map[string]interface{}{"webhook": webhookData},
})
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Linear webhook accepts unauthenticated events

High Severity

LinearWebhookHandler emits integration events from any POST body without verifying a webhook signature or shared secret. Anyone who can reach the webhook URL can forge webhook events and trigger linear.onIssueCreated workflows.

Fix in Cursor Fix in Web

return nil
}
return metadata.Team
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused exported metadata helper added

Low Severity

GetTeamFromMetadata is exported but has no callers in the repository. The unused helper introduces dead code in pkg/integrations/linear/common.go, increasing maintenance surface without runtime value.

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Semaphore] Get Pipeline

1 participant