Skip to content

Merge pull request #1586 from microsoft/ci/switch-tag-trigger #2837

Merge pull request #1586 from microsoft/ci/switch-tag-trigger

Merge pull request #1586 from microsoft/ci/switch-tag-trigger #2837

name: Build and test all the Kiota packages
on:
workflow_dispatch:
push:
branches: [ main ]
tags: [ '@microsoft/kiota-abstractions@*' ]
pull_request:
jobs:
build:
runs-on: ubuntu-latest
environment:
name: build_test
env:
TENANT_ID: ${{ secrets.TENANT_ID }}
strategy:
matrix:
node-version: [18.x, 20.x, 22.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run build
- run: npm run lint:eslint:loud
- run: npm run prettier:check
- name: Archive dist folders # archive dist folders to verify if they are transpiled correctly and available for publishing
uses: actions/upload-artifact@v4
with:
name: dist folders ${{ matrix.node-version }}
path: |
packages/abstractions/dist
packages/serialization/form/dist
packages/serialization/json/dist
packages/serialization/multipart/dist
packages/serialization/text/dist
packages/http/fetch/dist
packages/authentication/azure/dist
- run: npm run test:integrated
if: ${{env.TENANT_ID != '' }}
env:
TENANT_ID: ${{secrets.tenant_id}}
CLIENT_ID: ${{secrets.client_id}}
CLIENT_SECRET: ${{secrets.client_secret}}
USER_ID: ${{secrets.user_id}}
- run: npm run test
code-coverage:
runs-on: ubuntu-latest
strategy:
matrix:
coverage:
- name: "Abstractions"
path: "./packages/abstractions/coverage"
- name: "Authentication Azure"
path: "./packages/authentication/azure/coverage"
- name: "Authentication Spfx"
path: "./packages/authentication/spfx/coverage"
- name: "Http Fetch"
path: "./packages/http/fetch/coverage"
- name: "Serialization Form"
path: "./packages/serialization/form/coverage"
- name: "Serialization JSON"
path: "./packages/serialization/json/coverage"
- name: "Serialization Text"
path: "./packages/serialization/text/coverage"
- name: "Serialization Multipart"
path: "./packages/serialization/multipart/coverage"
- name: "Bundle"
path: "./packages/bundle/coverage"
steps:
- uses: actions/checkout@v4
- name: Use Node.js 22.x
uses: actions/setup-node@v4
with:
node-version: 22.x
- run: npm ci
- run: npm run build
- run: npm run test:coverage
- name: Code Coverage Report ${{ matrix.coverage.name }}
uses: irongut/[email protected]
with:
filename: ${{ matrix.coverage.path }}/cobertura-coverage.xml
format: markdown
hide_branch_rate: false
output: both
badge: true
- name: Archive coverage files
uses: actions/upload-artifact@v4
with:
name: Coverage files for ${{ matrix.coverage.name }}
path: ${{ matrix.coverage.path }}
publish-npm:
if: startsWith(github.ref, 'refs/tags/')
needs: [build, check-typescript-version-matrix]
environment:
name: production_feed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
registry-url: https://registry.npmjs.org/
- run: npm ci
- run: npm run build
- run: npx lerna publish from-package --no-push --yes
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
# The check-typescript-version-matrix returns success if all matrix jobs in build are successful; otherwise, it returns a failure.
# Use this as a PR status check for GitHub Policy Service instead of individual matrix entry checks.
check-typescript-version-matrix:
runs-on: ubuntu-latest
needs: [build,code-coverage]
if: always()
steps:
- name: All build matrix options are successful
if: ${{ !(contains(needs.*.result, 'failure')) }}
run: exit 0
- name: One or more build matrix options failed
if: ${{ contains(needs.*.result, 'failure') }}
run: exit 1