Skip to content

Migrate build pipelines from GitHub Actions to Azure DevOps#355

Merged
dkhalife merged 5 commits into
mainfrom
ado/api-build-pipeline
Jun 21, 2026
Merged

Migrate build pipelines from GitHub Actions to Azure DevOps#355
dkhalife merged 5 commits into
mainfrom
ado/api-build-pipeline

Conversation

@dkhalife

@dkhalife dkhalife commented Jun 21, 2026

Copy link
Copy Markdown
Owner

Migrates all four build workflows (API, Android, Frontend, MCP) from GitHub Actions to Azure DevOps pipelines that extends the shared dkhalife/Pipeline.Templates repo. Pipelines are hosted on ADO; the source and template repos are reached over GitHub via the github service connection.

What's here

New ADO consumer pipelines under .azuredevops/ — intent-only, each extends pipeline.yml@templates:

  • api-build.yml — Go apiserver (build/lint/test, version -ldflags)
  • mcp-build.yml — .NET 9 mcpserver (dotnet build type)
  • android-build.yml — unsigned assembleDebug (android build type, sign: false)
  • frontend-build.yml — Node 24 / yarn (lint, tsc, vite, unit tests) + push-only Playwright e2e, run in the mcr.microsoft.com/playwright container

apiserver lint fixes — the ADO template runs golangci-lint v2 (stricter than the v1.64.8 the old GitHub workflow used). Resolved all findings: errcheck on unchecked Close/Remove/Setenv returns, staticcheck QF1008 (db.Dialector.Name()db.Name()), QF1003 (tagged switch), ST1023 (redundant type). No behavior change.

android/gradlew — marked executable (the ADO android step invokes ./gradlew directly).

dkhalife added 5 commits June 21, 2026 06:21
Equivalent of the api-build GitHub Actions workflow, expressed as an
intent-only consumer of pipeline.yml@templates. Reaches the GitHub-hosted
source and template repo via the "github" service connection.
The ADO pipeline runs golangci-lint v2, which is stricter than the v1.64.8
the GitHub workflow used (no default exclusion presets; full staticcheck
suite). Resolve all findings:

- errcheck: check/ignore error returns on Close/Remove/Setenv/Unsetenv
  across config, ws, notifications and database tests + http response
  bodies in gotify/webhook.
- staticcheck QF1008: db.Dialector.Name() -> db.Name() in migrations.
- staticcheck QF1003: tagged switch on freq.Unit in task repo.
- staticcheck ST1023: drop redundant time.Time type in task service.

Verified: go build, go test (serial), and golangci-lint v2.12.2 all clean.
Add ADO consumer pipelines that extend the shared template, mirroring
the existing api-build.yml. MCP maps to a dotnet module (sdk 9.x,
Release, test: false), Android to an unsigned debug android module
(jdk 21, assembleDebug, sign: false), and Frontend to the new node
build type (node 24.x) with opt-in push-only Playwright e2e + report.
The ADO android pipeline invokes ./gradlew directly (no chmod step like
the old GitHub workflow had), so the wrapper must carry the executable
bit in git. It was committed as 100644.
The hosted agent hangs on `playwright install` (browser download blocks
with zero output). Run the job in mcr.microsoft.com/playwright:v1.55.1-noble
(matching @playwright/test 1.55.1) where browsers + OS deps are preinstalled,
so the install step is an instant no-op.
Copilot AI review requested due to automatic review settings June 21, 2026 21:06

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR migrates the repo’s build automation from GitHub Actions to Azure DevOps by adding consumer pipelines under .azuredevops/ that extend a shared dkhalife/Pipeline.Templates repo, and includes mechanical Go lint fixes needed for the stricter golangci-lint setup.

Changes:

  • Added 4 Azure DevOps pipeline definitions (API, Android, Frontend, MCP) that extends shared templates.
  • Applied Go code/test adjustments to satisfy stricter linting (errcheck/staticcheck cleanups, minor refactors).
  • Ensured Android gradlew can be executed directly by the pipeline (checked in wrapper script).
Show a summary per file
File Description
.azuredevops/api-build.yml New ADO pipeline for Go API build/lint/test (extends shared templates).
.azuredevops/android-build.yml New ADO pipeline for Android assembleDebug (extends shared templates).
.azuredevops/frontend-build.yml New ADO pipeline for frontend lint/typecheck/build/test (+ configured e2e).
.azuredevops/mcp-build.yml New ADO pipeline for .NET MCP server build.
android/gradlew Adds Gradle wrapper script intended to be executed by CI.
apiserver/internal/migrations/001_initial_schema.go Staticcheck-driven dialect detection refactor in migrations.
apiserver/internal/migrations/002_entra_auth.go Staticcheck-driven dialect detection refactor in migrations.
apiserver/internal/migrations/003_drop_password.go Staticcheck-driven dialect detection refactor in migrations.
apiserver/internal/migrations/004_drop_app_tokens.go Staticcheck-driven dialect detection refactor in migrations.
apiserver/internal/migrations/005_drop_email.go Staticcheck-driven dialect detection refactor in migrations.
apiserver/internal/migrations/006_account_deletion.go Staticcheck-driven dialect detection refactor in migrations.
apiserver/internal/migrations/007_sessions.go Staticcheck-driven dialect detection refactor in migrations.
apiserver/internal/migrations/008_unique_label_names.go Staticcheck-driven dialect detection refactor in migrations.
apiserver/internal/migrations/009_task_histories_task_id_id_index.go Staticcheck-driven dialect detection refactor in migrations.
apiserver/internal/repos/task/task.go Refactors recurrence unit branching to a switch.
apiserver/internal/services/tasks/task.go Minor variable declaration simplification.
apiserver/internal/services/notifications/webhook.go Errcheck-driven change to explicitly ignore Close() error.
apiserver/internal/services/notifications/gotify.go Errcheck-driven change to explicitly ignore Close() error.
apiserver/internal/services/notifications/safehttp_test.go Errcheck-driven Close() handling update in tests.
apiserver/internal/utils/test/database.go Errcheck-driven database close handling update in tests.
apiserver/internal/utils/database/database_test.go Errcheck-driven database close handling update in tests.
apiserver/internal/ws/server_test.go Errcheck-driven websocket close handling update in tests.
apiserver/config/config_test.go Errcheck-driven cleanup/env mutation changes in config tests.

Copilot's findings

  • Files reviewed: 22/23 changed files
  • Comments generated: 21

Comment thread apiserver/internal/migrations/001_initial_schema.go
Comment thread apiserver/internal/migrations/002_entra_auth.go
Comment thread apiserver/internal/migrations/002_entra_auth.go
Comment thread apiserver/internal/migrations/003_drop_password.go
Comment thread apiserver/internal/migrations/004_drop_app_tokens.go
Comment thread apiserver/config/config_test.go
Comment thread .azuredevops/api-build.yml
Comment thread .azuredevops/android-build.yml
Comment thread .azuredevops/frontend-build.yml
Comment thread .azuredevops/mcp-build.yml
@dkhalife dkhalife merged commit 7c1faf6 into main Jun 21, 2026
12 checks passed
@dkhalife dkhalife deleted the ado/api-build-pipeline branch June 21, 2026 21:15
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.

2 participants