Skip to content
This repository has been archived by the owner on Jul 9, 2024. It is now read-only.

chore(deps): update dependency @swc/cli to v0.4.0 #1694

chore(deps): update dependency @swc/cli to v0.4.0

chore(deps): update dependency @swc/cli to v0.4.0 #1694

name: Test and Release
on:
workflow_dispatch:
push:
env:
LOCATION: norwayeast
permissions:
id-token: write
contents: write
issues: write
jobs:
run-id:
name: Create run ID
runs-on: ubuntu-22.04
outputs:
id: ${{ steps.run-id.outputs.id }}
steps:
- name: Generate ID
id: run-id
run: |
RUN_ID=`node -e "const crypto = require('crypto'); process.stdout.write(crypto.randomBytes(Math.ceil(8 * 0.5)).toString('hex').slice(0, 8));"`
echo "id=${RUN_ID}" >> $GITHUB_OUTPUT
mock-api:
name: Create mock HTTP API
runs-on: ubuntu-22.04
needs: [run-id]
outputs:
endpoint: ${{ steps.endpoint.outputs.endpoint }}
resource-group: ${{ steps.resource-group.outputs.name }}
storage-account: ${{ steps.resources.outputs.storage-account }}
app-name: ${{ steps.resources.outputs.app-name }}
environment:
name: ci
steps:
- name: Login to Azure
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.x"
cache: "npm"
- name: Install dependencies
run: npm ci --no-audit
- name: Compile source
run: npx tsc
- name: Create resource group
id: resource-group
run: |
az group create -n mock-api-${{ needs.run-id.outputs.id }} -l ${{
env.LOCATION }}
echo "name=mock-api-${{ needs.run-id.outputs.id }}" >> $GITHUB_OUTPUT
- name: Create Mock API
id: resources
run: |
STORAGE_ACCOUNT_NAME=mockapi${{ needs.run-id.outputs.id }}
az deployment group create \
--mode Complete \
--name manual-deployment \
--resource-group ${{ steps.resource-group.outputs.name }} \
--template-file mock-http-api.bicep \
--parameters \
storageAccountName=$STORAGE_ACCOUNT_NAME
appName=$STORAGE_ACCOUNT_NAME
echo "storage-account=${STORAGE_ACCOUNT_NAME}" >> $GITHUB_OUTPUT
echo "app-name=${STORAGE_ACCOUNT_NAME}" >> $GITHUB_OUTPUT
- name: Get API endpoint
id: endpoint
run: |
MOCK_HTTP_API_ENDPOINT=`az functionapp show -g ${{ steps.resource-group.outputs.name }} -n mockapi${{ needs.run-id.outputs.id }} | jq -r '.defaultHostName'`
echo "endpoint=${MOCK_HTTP_API_ENDPOINT}" >> $GITHUB_OUTPUT
- name: Deploy the function app
run: |
npx tsx scripts/pack-mock-http-api-app.ts
az functionapp deployment source config-zip -g ${{ steps.resource-group.outputs.name }} -n mockapi${{ needs.run-id.outputs.id }} --src dist/mock-http-api.zip
test-resources:
name: Create test resources
needs: [run-id]
runs-on: ubuntu-22.04
environment:
name: ci
outputs:
resource-group: ${{ steps.resource-group.outputs.name }}
keyvault-name: ${{ steps.resources.outputs.keyvault-name }}
app-name: ${{ steps.resources.outputs.app-name }}
steps:
- name: Login to Azure
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.x"
cache: "npm"
- name: Create resource group
id: resource-group
run: |
az group create -n memfault-integration-${{ needs.run-id.outputs.id }} -l ${{ env.LOCATION }}
echo "name=memfault-integration-${{ needs.run-id.outputs.id }}" >> $GITHUB_OUTPUT
- name: Create test resources
id: resources
run: |
APP_NAME=mfltinttest${{ needs.run-id.outputs.id }}
KEYVAULT_NAME=kv-${{ needs.run-id.outputs.id }}
az deployment group create \
--mode Complete \
--name manual-deployment \
--resource-group ${{ steps.resource-group.outputs.name }} \
--template-file test-resources.bicep \
--parameters \
appName=${APP_NAME} \
keyVaultName=${KEYVAULT_NAME}
echo "keyvault-name=${KEYVAULT_NAME}" >> $GITHUB_OUTPUT
echo "app-name=${APP_NAME}" >> $GITHUB_OUTPUT
integration-resources:
name: Deploy Memfault integration resources
needs: [run-id, test-resources]
runs-on: ubuntu-22.04
environment:
name: ci
outputs:
storage-account: ${{ steps.resources.outputs.storage-account }}
steps:
- name: Login to Azure
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.x"
cache: "npm"
- name: Create integration resources
id: resources
run: |
STORAGE_ACCOUNT_NAME=mfltint${{ needs.run-id.outputs.id }}
az deployment group create \
--mode Incremental \
--name memfault-integration-deployment \
--resource-group ${{ needs.test-resources.outputs.resource-group }} \
--template-file memfault-integration.bicep \
--parameters \
appName=${{ needs.test-resources.outputs.app-name }} \
keyVaultName=${{ needs.test-resources.outputs.keyvault-name }} \
storageAccountName=$STORAGE_ACCOUNT_NAME
echo "storage-account=${STORAGE_ACCOUNT_NAME}" >> $GITHUB_OUTPUT
- name: Deploy the function app
run: |
npm ci --no-audit
npx tsc
npx tsx scripts/pack-app.ts
az functionapp deployment source config-zip -g ${{ needs.test-resources.outputs.resource-group }} -n ${{ needs.test-resources.outputs.app-name }}-memfault-integration --src dist/functionapp.zip
keyvault-settings:
name: Store necessary settings in KeyVault
runs-on: ubuntu-22.04
needs: [run-id, mock-api, test-resources]
environment:
name: ci
steps:
- name: Login to Azure
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Assign 'Key Vault Secrets Officer' permission
run: |
az role assignment create --role b86a8fe4-44ce-4948-aee5-eccb2c155cd7 \
--assignee ${{ secrets.AZURE_CLIENT_ID }} \
--scope /subscriptions/${{ secrets.AZURE_SUBSCRIPTION_ID }}/resourceGroups/${{ needs.test-resources.outputs.resource-group }}/providers/Microsoft.KeyVault/vaults/${{ needs.test-resources.outputs.keyvault-name }}
- name: Set secrets
run: |
az keyvault secret set --vault-name ${{ needs.test-resources.outputs.keyvault-name }} --name memfaultProjectKey --value my-projectKey
az keyvault secret set --vault-name ${{ needs.test-resources.outputs.keyvault-name }} --name memfaultOrganization --value my-org
az keyvault secret set --vault-name ${{ needs.test-resources.outputs.keyvault-name }} --name memfaultProject --value my-project
az keyvault secret set --vault-name ${{ needs.test-resources.outputs.keyvault-name }} --name memfaultAuthToken --value my-authToken
az keyvault secret set --vault-name ${{ needs.test-resources.outputs.keyvault-name }} --name memfaultApiEndpoint --value "https://${{ needs.mock-api.outputs.endpoint }}/api/api.memfault.com/"
az keyvault secret set --vault-name ${{ needs.test-resources.outputs.keyvault-name }} --name memfaultChunksEndpoint --value "https://${{ needs.mock-api.outputs.endpoint }}/api/chunks.memfault.com/"
test:
name: Run end-to-end tests
runs-on: ubuntu-22.04
needs: [test-resources, mock-api, keyvault-settings, integration-resources]
environment:
name: ci
steps:
- name: Login to Azure
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.x"
cache: "npm"
- name: Install dependencies
run: npm ci --no-audit
- name: Compile source
run: npx tsc
- name: Compile TypeScript
run: npx tsc
- name: Check source code with eslint
run: npx eslint .
- name: Check if source code is properly formatted
run: npx prettier -c ./
- name: Run Unit Tests
run: npm test
- name: Run tests
env:
IOT_HUB_NAME: ${{ needs.test-resources.outputs.app-name }}IotHub
RESOURCE_GROUP: ${{ needs.test-resources.outputs.resource-group }}
MOCK_API_RESOURCE_GROUP: ${{ needs.mock-api.outputs.resource-group }}
MOCK_API_STORAGE_ACCOUNT_NAME:
${{ needs.mock-api.outputs.storage-account }}
MOCK_API_APP_NAME: ${{ needs.mock-api.outputs.app-name }}
run: |
npm run test:e2e
cat e2e-test-result.json | npx tsx feature-runner/markdown-reporter.ts >> $GITHUB_STEP_SUMMARY
- uses: actions/upload-artifact@v4
if: always()
with:
if-no-files-found: error
name: e2e-test-result-${{ github.sha }}
path: e2e-test-result.json
cleanup-test-resources:
name: Clean up test resources
runs-on: ubuntu-22.04
needs: [test, test-resources]
if: always() && !cancelled()
environment:
name: ci
steps:
- name: Login to Azure
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Delete resource group
if: always()
run:
az group delete -n ${{ needs.test-resources.outputs.resource-group }}
-y
cleanup-mock-api:
name: Clean up mock HTTP API resources
runs-on: ubuntu-22.04
needs: [test, mock-api]
if: always() && !cancelled()
environment:
name: ci
steps:
- name: Login to Azure
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Delete Mock API resource group
if: always()
run: az group delete -n ${{ needs.mock-api.outputs.resource-group }} -y
release:
needs:
- test
runs-on: ubuntu-22.04
if: github.ref == 'refs/heads/saga'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.x"
cache: "npm"
- name: Install dependencies
run: npm ci --no-audit
- name: Semantic release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npx semantic-release