diff --git a/.github/workflows/build-tokens.yaml b/.github/workflows/build-tokens.yaml new file mode 100644 index 0000000000..d463475e55 --- /dev/null +++ b/.github/workflows/build-tokens.yaml @@ -0,0 +1,71 @@ +name: Build Tokens +on: + pull_request: + types: [opened, synchronize, edited, reopened] + paths: + - 'packages/tokens/**' + +jobs: + build: + name: Build Tokens + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup + uses: ./.github/actions/setup-pnpm + + - name: Install dependencies + run: pnpm --filter design-system-tokens... install + + - name: Build tokens & dependencies + run: pnpm --filter design-system-tokens... build + + - name: Create Summary + id: summary + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs') + const path = require('path') + + const inputFileNames = fs.readdirSync('packages/tokens/tokensstudio-generated') + const inputFiles = inputFileNames.map(fileName => ({ + type: path.extname(fileName), + name: fileName, + content: fs.readFileSync(`packages/tokens/tokensstudio-generated/${fileName}`, 'utf8') + })) + + const outputOrder = [ + 'index.scss', + 'core.scss', + 'mode.scss', + 'device.scss', + 'channel.scss', + 'theme.scss', + 'components.scss', + ] + const outputFileNames = fs.readdirSync('packages/tokens/dist') + const outputFiles = outputFileNames.map(fileName => ({ + type: path.extname(fileName), + name: fileName, + content: fs.readFileSync(`packages/tokens/dist/${fileName}`, 'utf8') + })).sort((a, b) => (outputOrder.includes(a.name) ? outputOrder.indexOf(a.name) : 1000) - (outputOrder.includes(b.name) ? outputOrder.indexOf(b.name) : 1000)) + + return `# Token Build + ## Input + ${inputFiles.map(({ type, name, content }) => `
+ ${name} +
${content}
+
`).join('\n')} + + ## Output + ${outputFiles.map(({ type, name, content }) => `
+ ${name} +
${content}
+
`).join('\n')} + ` + + - name: Output Summary + run: echo -e ${{ steps.summary.outputs.result }} >> $GITHUB_STEP_SUMMARY