name: Generate Asset Compare
on:
issue_comment:
types: [ created, edited ]
permissions:
contents: read
issues: write
pull-requests: write
jobs:
asset-compare:
if: ${{ github.event.issue.pull_request && startsWith(github.event.comment.body, '/diff') }}
env:
SI_BEARER_TOKEN: ${{ secrets.SI_BEARER_TOKEN }}
SI_MODULE_INDEX_URL: "https://module-index.systeminit.com"
runs-on: ubuntu-latest
steps:
- uses: denoland/setup-deno@v2
- uses: dtolnay/rust-toolchain@stable
- name: Checkout pull request
uses: actions/checkout@v4
with:
ref: refs/pull/${{ github.event.issue.number }}/head
- name: Extract asset name from comment
id: extract-name
uses: actions/github-script@v7
with:
script: |
const commentBody = context.payload.comment.body || '';
if (!commentBody || commentBody === "") {
console.log('Comment body is empty or undefined');
core.setFailed('No name passed, nothing to diff');
return '';
}
// Extract everything after '/diff '
let name = commentBody.substring('/diff '.length).trim();
console.log(`Extracted: ${name}`);
// Transform Azure resource names (e.g., Microsoft.Web/sites -> Microsoft.Web.sites)
// Replace / with .
name = name.replace(/\//g, '.');
console.log(`Transformed to filename: ${name}`);
return name;
result-encoding: string
- name: Generate Specs
run: |
cd bin/clover
LOG_LEVEL=debug deno task run generate-specs --provider=all --force-update-existing-packages
- name: Generate Diff
run: |
cd bin/hoist
cargo run -- get-diff-for-asset -t ../clover/si-specs/${{ steps.extract-name.outputs.result }}.json > diff.md
- name: Post Diff to PR
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const diff = fs.readFileSync('./bin/hoist/diff.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: diff
})