Skip to content

Commit 11d3c68

Browse files
Add throwaway canary feed OIDC probe workflow
Phase 0 probe validating id-cpd-ci OIDC federated credential can mint an Azure DevOps token and publish to the internal copilot-canary-spike npm feed. To be deleted once Phase 0 is proven. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 44ec87f commit 11d3c68

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
name: canary-feed-oidc-probe
2+
3+
# THROWAWAY Phase 0 probe. Validates that id-cpd-ci (via the OIDC federated
4+
# credential on environment:cicd) can mint an Azure DevOps token and publish to
5+
# the internal copilot-canary-spike npm feed. Delete once Phase 0 is proven.
6+
7+
on:
8+
workflow_dispatch:
9+
10+
permissions:
11+
id-token: write # for azure/login OIDC
12+
contents: read # for actions/checkout
13+
14+
jobs:
15+
probe:
16+
runs-on: ubuntu-latest
17+
environment: cicd # MUST match federated credential subject repo:github/copilot-sdk:environment:cicd
18+
steps:
19+
- name: Azure Login (OIDC -> id-cpd-ci)
20+
uses: azure/login@532459ea530d8321f2fb9bb10d1e0bcf23869a43 # v3.0.0
21+
with:
22+
client-id: "${{ vars.CPD_ID_CLIENT_ID }}" # id-cpd-ci
23+
tenant-id: "${{ vars.CPD_ID_TENANT_ID }}"
24+
subscription-id: "${{ vars.CPD_ID_SUBSCRIPTION_ID }}"
25+
26+
- name: Mint Azure DevOps token
27+
id: adotoken
28+
run: |
29+
TOKEN=$(az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv)
30+
echo "::add-mask::$TOKEN"
31+
echo "token=$TOKEN" >> "$GITHUB_OUTPUT"
32+
33+
- name: Setup Node
34+
uses: actions/setup-node@v4
35+
with:
36+
node-version: 22
37+
38+
- name: Publish throwaway package to spike feed
39+
env:
40+
FEED_TOKEN: ${{ steps.adotoken.outputs.token }}
41+
run: |
42+
set -euo pipefail
43+
WORK="$(mktemp -d)"; cd "$WORK"
44+
VERSION="0.0.0-ci.${{ github.run_number }}"
45+
cat > package.json <<JSON
46+
{ "name": "@copilot-canary-spike/ci-probe", "version": "${VERSION}", "description": "OIDC CI round-trip probe" }
47+
JSON
48+
cat > .npmrc <<EOF
49+
registry=https://pkgs.dev.azure.com/devdiv/DevDiv/_packaging/copilot-canary-spike/npm/registry/
50+
//pkgs.dev.azure.com/devdiv/DevDiv/_packaging/copilot-canary-spike/npm/registry/:_authToken=${FEED_TOKEN}
51+
//pkgs.dev.azure.com/devdiv/DevDiv/_packaging/copilot-canary-spike/npm/:_authToken=${FEED_TOKEN}
52+
EOF
53+
npm publish
54+
echo "Published @copilot-canary-spike/ci-probe@${VERSION}"
55+
56+
- name: Read back (fresh install)
57+
env:
58+
FEED_TOKEN: ${{ steps.adotoken.outputs.token }}
59+
run: |
60+
set -euo pipefail
61+
WORK="$(mktemp -d)"; cd "$WORK"
62+
VERSION="0.0.0-ci.${{ github.run_number }}"
63+
cat > .npmrc <<EOF
64+
registry=https://pkgs.dev.azure.com/devdiv/DevDiv/_packaging/copilot-canary-spike/npm/registry/
65+
//pkgs.dev.azure.com/devdiv/DevDiv/_packaging/copilot-canary-spike/npm/registry/:_authToken=${FEED_TOKEN}
66+
//pkgs.dev.azure.com/devdiv/DevDiv/_packaging/copilot-canary-spike/npm/:_authToken=${FEED_TOKEN}
67+
EOF
68+
npm view "@copilot-canary-spike/ci-probe@${VERSION}" version
69+
npm install "@copilot-canary-spike/ci-probe@${VERSION}" --no-save
70+
test -f node_modules/@copilot-canary-spike/ci-probe/package.json && echo "READBACK OK"

0 commit comments

Comments
 (0)