Developer Portfolio Page Sync
Nightly, for each developer in an Engineers SharePoint list, fetches their public repos via Lists All Public Repositories For A User and updates the 'Open Source Projects' section on their intranet profile.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
Nightly Cloud Flow that sweeps the FlowLibs Engineers SharePoint list, pulls each developer's public GitHub repos, and rewrites the "Open Source Projects" HTML on their intranet profile row. Pure connector-to-connector — no inline fixtures.
Trigger: Recurrence — daily at 06:00 UTC. Flow Checker reports 0 errors, 1 warning ("This flow is off" — intended). Category: SharePoint. Skill Level: Intermediate.
Use Case
Engineering / HR teams maintain a FlowLibs - Engineers SharePoint list — one row per developer — with columns for name, GitHub handle, SharePoint profile link, rendered HTML, and a sync toggle. Each night the flow filters to rows where SyncEnabled = Yes, queries GitHub for each developer's public repositories, and writes a prebuilt HTML fragment (<h3>Open Source Projects</h3> + <ul>...</ul>) back into the row's OpenSourceProjectsHtml column. Any SharePoint page or Viva Connections web part bound to that field picks up the update automatically, so developer bios stay in sync with GitHub without any page-level editing.
The flow is ideal for teams that:
- Engineering and HR teams that maintain a roster of developers on an intranet
- Organizations that want GitHub activity reflected on SharePoint profile pages
- Teams running Viva Connections web parts bound to a managed HTML column
- Scenarios where bios should stay in sync without manual page editing
Flow Architecture
Nightly Recurrence
RecurrenceFires daily at 06:00 UTC. No `recurrence` OpenApi block is needed — Recurrence is not an OpenApiConnection trigger.
Init varSharePointSiteUrl
Initialize variableString variable seeded from the `flowlibs_SharePointSiteURL` environment variable so the site URL is configurable per environment.
Init varEngineersListTitle
Initialize variableString variable seeded from the `flowlibs_EngineersListTitle` environment variable so the target list name is configurable per environment.
Init varSyncedCount
Initialize variableInteger counter set to 0. Incremented after every successful PatchItem so the run logs how many engineers were synced.
Get Engineers
SharePoint — Get itemsReads the Engineers list with `$filter=SyncEnabled eq 1` and `$orderby=Title`. Drop the filter to sync every row.
For each engineer
Apply to eachIterates `@outputs('Get_Engineers')?['body/value']`. Each iteration fetches repos, builds HTML, patches the row, and increments the counter.
Get Public Repos For User
GitHub — Lists all public repositories for a userInside the loop. Calls `GetRepos` with `repositoryOwner = item.GitHubUsername`, `type = owner`, `sort = updated`.
Select Repo Html Rows
Data Operations — SelectProjects each repo into a single `<li>...</li>` row using `coalesce` for description/language so missing fields render cleanly.
Compose Projects Html
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_SharePointSiteURL | String | https://your-tenant.sharepoint.com | Root site containing the Engineers list. Reused across FlowLibs flows. Set the current value per environment. |
| flowlibs_EngineersListTitle | String | FlowLibs - Engineers | Title of the SharePoint list to iterate. Override if your list uses a different display title. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| SharePoint | shared_sharepointonline | GetItems PatchItem |
| GitHub | shared_github | GetRepos (Lists all public repositories for a user) |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Repoint the SharePoint site
- Set the environment variable flowlibs_SharePointSiteURL current value in the target environment. Do not edit the flow directly.
- Rename or swap the list
- Set the flowlibs_EngineersListTitle current value. The flow reads both env vars into string variables at startup.
- Change the schedule
- Edit the Nightly_Recurrence trigger (frequency, interval, hours, timeZone). The flow ships off; turning it on arms the recurrence.
- Filter engineers differently
- Update the $filter on Get_Engineers (currently SyncEnabled eq 1). To sync everyone, drop the $filter param entirely.
- Change the HTML shape
- Select_Repo_Html_Rows builds each <li> and Compose_Projects_Html wraps the list. Both use coalesce so missing descriptions/languages render cleanly — adjust the templates to taste.
- Add fields to the patch
- Update_Engineer_Profile_Item uses slash-path keys (item/Title, item/OpenSourceProjectsHtml, item/LastSyncedUtc). Add more item/ColumnInternalName entries to write additional columns.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Select — per-repo <li> row
Projects each GitHub repo into a single `<li>` row inside the Select action. `coalesce` keeps the markup clean when fields are missing.
EXPR.02Compose — wrap Select output into a clean <ul>
Wraps the Select output in `<h3>` + intro paragraph + `<ul>`. The triple-`replace` strips the Select action's `{ "html": "..." }` wrapper without needing a Join.
EXPR.03PatchItem — slash-path keys
Use slash-path keys on SharePoint PatchItem to target column internal names; add more `item/ColumnInternalName` entries to write additional columns.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.