Migrate build pipelines from GitHub Actions to Azure DevOps#355
Merged
Conversation
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.
Contributor
There was a problem hiding this comment.
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
extendsshared templates. - Applied Go code/test adjustments to satisfy stricter linting (errcheck/staticcheck cleanups, minor refactors).
- Ensured Android
gradlewcan 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Migrates all four build workflows (API, Android, Frontend, MCP) from GitHub Actions to Azure DevOps pipelines that
extendsthe shareddkhalife/Pipeline.Templatesrepo. Pipelines are hosted on ADO; the source and template repos are reached over GitHub via thegithubservice connection.What's here
New ADO consumer pipelines under
.azuredevops/— intent-only, eachextends pipeline.yml@templates:api-build.yml— Go apiserver (build/lint/test, version-ldflags)mcp-build.yml— .NET 9 mcpserver (dotnetbuild type)android-build.yml— unsignedassembleDebug(androidbuild type,sign: false)frontend-build.yml— Node 24 / yarn (lint, tsc, vite, unit tests) + push-only Playwright e2e, run in themcr.microsoft.com/playwrightcontainerapiserver lint fixes — the ADO template runs golangci-lint v2 (stricter than the v1.64.8 the old GitHub workflow used). Resolved all findings:
errcheckon uncheckedClose/Remove/Setenvreturns,staticcheckQF1008 (db.Dialector.Name()→db.Name()), QF1003 (tagged switch), ST1023 (redundant type). No behavior change.android/gradlew— marked executable (the ADO android step invokes./gradlewdirectly).