### Setup Project and Install Dependencies Source: https://github.com/alexey1312/exfig-action/blob/main/CONTRIBUTING.md Clones the exfig-action repository, navigates into the project directory, and installs necessary Node.js dependencies using npm. It also mentions the `./bin/mise` script for managing Node.js versions and tools. ```bash git clone https://github.com/alexey1312/exfig-action.git cd exfig-action npm install ``` -------------------------------- ### Install Node Modules Source: https://github.com/alexey1312/exfig-action/blob/main/CLAUDE.md This command installs the necessary Node.js dependencies for the project. It should be run before other development tasks if the `node_modules/` directory is missing. ```bash npm ci ``` -------------------------------- ### Run Development Tasks with mise Source: https://github.com/alexey1312/exfig-action/blob/main/CONTRIBUTING.md Executes common development tasks such as linting, testing, and building the project using the `./bin/mise` script. This script automates the setup of Node.js 20 and other required tools. ```bash ./bin/mise run lint ./bin/mise run test ./bin/mise run build ``` -------------------------------- ### Conventional Commit Message Examples Source: https://github.com/alexey1312/exfig-action/blob/main/CONTRIBUTING.md Provides examples of commit messages following the Conventional Commits specification. This format helps in automatically generating changelogs and standardizing commit history. ```text feat(action): add new input fix(action): handle edge case docs: update README ``` -------------------------------- ### Configuration File Example (PKL) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md An example of an ExFig configuration file written in PKL format. This file defines Figma file IDs, pages, and output paths for various asset types like icons and colors, targeting iOS platforms. ```pkl amends "package://github.com/alexey1312/ExFig/releases/download/v2.0.0/exfig@2.0.0#/ExFig.pkl" figma { fileId = "YOUR_FIGMA_FILE_KEY" } icons { new { figma { page = "Icons" } iOS { output = "Sources/Assets.xcassets/Icons" } } } colors { new { figma { page = "Colors" } iOS { output = "Sources/Assets.xcassets/Colors" } } } ``` -------------------------------- ### Define ExFig Configuration in PKL format Source: https://github.com/alexey1312/exfig-action/blob/main/docs/troubleshooting.md Define ExFig configuration using the PKL format, specifying Figma file IDs, output paths, and asset types. This configuration file guides ExFig on what assets to export and how to process them. ```pkl amends "package://github.com/alexey1312/ExFig/releases/download/v2.0.0/exfig@2.0.0#/ExFig.pkl" figma { fileId = "YOUR_FILE_KEY" } icons { new { figma { page = "Icons" } iOS { output = "src/icons" } } } ``` -------------------------------- ### ExFig Pkl Configuration File Example Source: https://context7.com/alexey1312/exfig-action/llms.txt This Pkl configuration file defines the Figma source and export destinations for ExFig. It specifies the Figma file ID, and sets up export configurations for icons, colors, and typography to iOS assets. ```pkl amends "package://github.com/alexey1312/ExFig/releases/download/v2.0.0/exfig@2.0.0#/ExFig.pkl" figma { fileId = "YOUR_FIGMA_FILE_KEY" } icons { new { figma { page = "Icons" } iOS { output = "Sources/Assets.xcassets/Icons" } } } colors { new { figma { page = "Colors" } iOS { output = "Sources/Assets.xcassets/Colors" } } } typography { new { figma { page = "Typography" } iOS { output = "Sources/Typography" } } } ``` -------------------------------- ### Enable Verbose Logging in ExFig Action Source: https://github.com/alexey1312/exfig-action/blob/main/docs/troubleshooting.md Enable verbose logging for ExFig Action to get detailed output during execution. This is useful for debugging issues by providing more information about the action's internal processes and potential errors. ```yaml - uses: alexey1312/exfig-action@v2 with: verbose: true ``` -------------------------------- ### Manual ExFig CLI Testing Source: https://github.com/alexey1312/exfig-action/blob/main/docs/troubleshooting.md Manually test ExFig functionality locally by downloading the CLI, setting the Figma token, and running commands. This helps reproduce issues encountered in the GitHub Action environment and aids in debugging. ```bash # Download ExFig curl -L -o exfig.zip https://github.com/alexey1312/exfig/releases/latest/download/exfig-macos.zip unzip exfig.zip chmod +x exfig # Run the same command export FIGMA_PERSONAL_TOKEN="your-token" ./exfig icons -i exfig.pkl --verbose ``` -------------------------------- ### Set Runner OS for ExFig Action Source: https://github.com/alexey1312/exfig-action/blob/main/docs/troubleshooting.md Specify the runner operating system for ExFig Action, ensuring compatibility. ExFig Action supports `ubuntu-latest` and `macos-latest`, but not Windows. ```yaml jobs: export: runs-on: ubuntu-latest # or macos-latest ``` -------------------------------- ### Basic Usage of ExFig Action Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Demonstrates the fundamental setup for the ExFig GitHub Action. It requires a Figma token and specifies the command to execute, with caching enabled for performance. ```yaml - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons cache: true ``` -------------------------------- ### ExFig Action with Slack Notifications Source: https://context7.com/alexey1312/exfig-action/llms.txt This example shows how to integrate ExFig GitHub Action with Slack notifications. It allows sending status updates upon export completion, failure, or cache hits. Custom mention formatting and Slack Block Kit templates can be utilized. ```yaml name: Export with Slack Notifications on: schedule: - cron: '0 0 * * *' jobs: export: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Export icons with notifications uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: batch config: 'exfig/colors.pkl, exfig/icons.pkl' cache: true slack_webhook: ${{ secrets.SLACK_WEBHOOK }} slack_mention: 'U123456' # User ID to mention on failure slack_templates: '.github/exfig-templates' # Custom templates directory ``` -------------------------------- ### Custom Slack Notification Template Source: https://context7.com/alexey1312/exfig-action/llms.txt This is an example of a custom Slack Block Kit template for ExFig notifications. It defines the structure and content of messages sent to Slack, using placeholders for dynamic data like command, assets, and run URL. ```json { "attachments": [{ "color": "{{COLOR}}", "blocks": [ { "type": "header", "text": { "type": "plain_text", "text": "{{ICON}} ExFig: {{TITLE}}", "emoji": true } }, { "type": "section", "fields": [ {"type": "mrkdwn", "text": "*Command:* `{{COMMAND}}`{{CONFIGS}}"}, {"type": "mrkdwn", "text": "*Assets:* {{ASSETS}}"} ] }, { "type": "section", "fields": [ {"type": "mrkdwn", "text": "*Repository:* {{REPO}}"}, {"type": "mrkdwn", "text": "*Duration:* {{DURATION}}"} ] }, { "type": "actions", "elements": [ { "type": "button", "text": {"type": "plain_text", "text": "View Run", "emoji": true}, "url": "{{RUN_URL}}" } ] } ] }] } ``` -------------------------------- ### Enable Exfig Action Caching and Verbose Logging Source: https://github.com/alexey1312/exfig-action/blob/main/README.md This example shows how to enable caching and verbose logging for the exfig-action. Caching can improve performance by reusing previous results, and verbose logging helps in debugging caching issues. ```yaml - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons cache: true verbose: true # Enable verbose logging to debug ``` -------------------------------- ### Asset Caching Configuration (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Details the configuration for ExFig's asset caching. This example explicitly sets the cache path and a prefix for the cache key, although default values are often sufficient. ```yaml - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons cache: true cache_path: '.exfig-cache.json' # Default cache_key_prefix: 'exfig-cache' # Default ``` -------------------------------- ### Specify ExFig Configuration File Path Source: https://github.com/alexey1312/exfig-action/blob/main/docs/troubleshooting.md Specify a custom path for the ExFig configuration file if it's not located at the default path. This allows flexibility in organizing project files and ensures the action can find the necessary configuration. ```yaml - uses: alexey1312/exfig-action@v2 with: config: 'config/exfig.pkl' ``` -------------------------------- ### Pin ExFig Action Version Source: https://github.com/alexey1312/exfig-action/blob/main/docs/troubleshooting.md Pin a specific version of the ExFig Action to avoid issues caused by breaking changes in the 'latest' release. This ensures consistent behavior and prevents unexpected failures due to automatic updates. ```yaml - uses: alexey1312/exfig-action@v2 with: version: 'v1.2.0' ``` -------------------------------- ### Configure Cache Key Prefix and Path for ExFig Action Source: https://github.com/alexey1312/exfig-action/blob/main/docs/troubleshooting.md Configure the cache key prefix and path for ExFig Action to ensure consistent cache restoration. A consistent prefix is crucial for cache hits, and specifying the cache path ensures the action knows where to look for cached files. ```yaml - uses: alexey1312/exfig-action@v2 with: cache: true cache_key_prefix: exfig-icons # Use consistent prefix cache_path: '.exfig-cache.json' # Default location ``` -------------------------------- ### Filter Specific Assets (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Illustrates how to filter exported assets using the `filter` argument. This example specifically exports icons that match the pattern 'navigation/*'. Caching is enabled for efficiency. ```yaml - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons filter: 'navigation/*' cache: true ``` -------------------------------- ### Basic Usage: Export Icons with Caching (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Demonstrates the basic setup for the ExFig action to export icons from Figma with caching enabled. This workflow checks out the repository, runs the ExFig action, and then commits any changes made by the action back to the repository. ```yaml name: Export Figma Icons on: workflow_dispatch: schedule: - cron: '0 0 * * *' # Daily jobs: export: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons cache: true - name: Commit changes run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add -A git diff --staged --quiet || git commit -m "Update icons from Figma" git push ``` -------------------------------- ### Enable Caching in ExFig Action Source: https://github.com/alexey1312/exfig-action/blob/main/docs/troubleshooting.md Enable caching for ExFig Action to reduce redundant API calls and speed up subsequent runs. Caching stores previously fetched assets locally, improving performance and reducing the load on the Figma API. ```yaml - uses: alexey1312/exfig-action@v2 with: cache: true ``` -------------------------------- ### Configure Rate Limit and Retries for ExFig Action Source: https://github.com/alexey1312/exfig-action/blob/main/docs/troubleshooting.md Adjust the rate limit and maximum retries for ExFig Action to manage API request frequency and resilience. This helps prevent rate limiting errors by controlling how often the action interacts with the Figma API and how many times it retries failed requests. ```yaml - uses: alexey1312/exfig-action@v2 with: rate_limit: 5 # Reduce from default 10 max_retries: 6 # Increase from default 3 ``` -------------------------------- ### Execute Jest Tests Source: https://github.com/alexey1312/exfig-action/blob/main/CLAUDE.md This command executes unit tests using Jest. It can be used as an alternative if the `./bin/mise run test` command fails to find Jest. ```bash npx jest ``` -------------------------------- ### Basic TypeScript Structure for GitHub Action Source: https://github.com/alexey1312/exfig-action/blob/main/AGENTS.md This is a conceptual representation of the main TypeScript file for the ExFig Action. It would contain the core logic for validating inputs, resolving versions, downloading binaries, executing ExFig CLI, parsing output, and handling notifications. ```typescript // Conceptual structure for src/index.ts import * as core from '@actions/core'; import * as exec from '@actions/exec'; import * as io from '@actions/io'; import * as tc from '@actions/tool-cache'; import * as github from '@actions/github'; import * as https from 'https'; async function run() { try { // 1. Validate inputs const figmaToken = core.getInput('figma_token'); const fileId = core.getInput('file_id'); // ... other inputs // 2. Resolve version and download ExFig CLI & Pkl binary const installDir = await io.which('exfig', true); // ... download logic using tc.downloadTool and tc.cacheDir // 3. Build and execute ExFig command const command = `ExFig export --file ${fileId} ...`; // Example command await exec.exec(command); // 4. Parse output and save artifacts // ... parsing logic // 5. Cache binaries await tc.saveCache([installDir], 'exfig-cache-key'); // 6. Slack notification (if configured) // ... https.request logic for Slack webhook } catch (error) { core.setFailed(error.message); } } run(); ``` -------------------------------- ### Exfig-Action CLI Commands Source: https://github.com/alexey1312/exfig-action/blob/main/openspec/AGENTS.md Essential commands for interacting with the exfig-action CLI. These commands allow users to list ongoing changes, view item details, validate specifications, and archive completed changes. ```bash openspec list # What's in progress? openspec show [item] # View details openspec validate --strict # Is it correct? openspec archive [--yes|-y] # Mark complete (add --yes for automation) ``` -------------------------------- ### Filter and Version Pin ExFig Action Source: https://context7.com/alexey1312/exfig-action/llms.txt This snippet demonstrates how to use the ExFig GitHub Action to filter specific assets by pattern and pin ExFig to a specific version. It allows passing additional CLI flags using `extra_args` and enables caching for faster builds. ```yaml name: Filtered Export on: workflow_dispatch jobs: export: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Export navigation icons only uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons filter: 'navigation/*' version: 'v1.2.0' cache: true extra_args: '--force --dry-run' rate_limit: 5 max_retries: 6 timeout: 60 concurrent_downloads: 4 ``` -------------------------------- ### Batch Export Figma Assets with JSON Report (YAML) Source: https://context7.com/alexey1312/exfig-action/llms.txt This workflow demonstrates batch exporting multiple Figma asset configurations defined in separate `.pkl` files. It utilizes the 'batch' command, enables caching and fail-fast behavior, and generates a JSON report for detailed export results and metrics. The output is then parsed using `jq`. ```yaml name: Batch Export Design System on: workflow_dispatch jobs: export: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Batch export assets id: exfig uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: batch config: 'exfig-colors.pkl, exfig-icons.pkl, exfig-typography.pkl' cache: true fail_fast: true report: 'exfig-report.json' verbose: true - name: Check export results if: always() run: | echo "Exit code: ${{ steps.exfig.outputs.exit_code }}" echo "Assets exported: ${{ steps.exfig.outputs.assets_exported }}" echo "Duration: ${{ steps.exfig.outputs.duration }}" echo "Failed configs: ${{ steps.exfig.outputs.failed_count }}" echo "Validated (cached): ${{ steps.exfig.outputs.validated_count }}" - name: Parse JSON report if: always() run: echo '${{ steps.exfig.outputs.report_json }}' | jq . ``` -------------------------------- ### Configure Exfig Action with Custom Slack Templates Source: https://github.com/alexey1312/exfig-action/blob/main/README.md This snippet demonstrates how to use the exfig-action with custom Slack notification templates. It requires a Figma token, a command to execute, and a Slack webhook URL. The `slack_templates` input specifies the directory containing custom JSON templates for Slack messages. ```yaml - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons slack_webhook: ${{ secrets.SLACK_WEBHOOK }} slack_templates: '.github/exfig-templates' ``` -------------------------------- ### Separate Cache Keys for Different ExFig Commands Source: https://github.com/alexey1312/exfig-action/blob/main/docs/caching.md Demonstrates how to use distinct cache key prefixes when exporting different types of assets with ExFig Action. This best practice ensures that caches for commands like 'colors' and 'icons' are isolated, preventing potential conflicts and improving cache hit rates. ```yaml - name: Export colors uses: alexey1312/exfig-action@v2 with: command: colors cache: true cache_key_prefix: exfig-colors - name: Export icons uses: alexey1312/exfig-action@v2 with: command: icons cache: true cache_key_prefix: exfig-icons ``` -------------------------------- ### OpenSpec CLI Commands for Change Management Source: https://github.com/alexey1312/exfig-action/blob/main/openspec/AGENTS.md Essential commands for managing changes and specifications within the OpenSpec project. These commands help list, show, validate, and archive project items. ```bash # Essential commands openspec list # List active changes openspec list --specs # List specifications openspec show [item] # Display change or spec openspec validate [item] # Validate changes or specs openspec archive [--yes|-y] # Archive after deployment (add --yes for non-interactive runs) # Project management openspec init [path] # Initialize OpenSpec openspec update [path] # Update instruction files # Interactive mode openspec show # Prompts for selection openspec validate # Bulk validation mode # Debugging openspec show [change] --json --deltas-only openspec validate [change] --strict ``` -------------------------------- ### macOS Runner Support (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Demonstrates using the ExFig action on a macOS runner. This is useful for projects that require macOS-specific build or export processes. ```yaml jobs: export: runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons ``` -------------------------------- ### Access ExFig Action Outputs in GitHub Actions Source: https://context7.com/alexey1312/exfig-action/llms.txt This snippet demonstrates how to access the outputs of the ExFig action within a GitHub Actions workflow. It shows how to use the `steps..outputs.` syntax to retrieve values like `exit_code`, `error_message`, and `assets_exported` for conditional logic and error handling. ```yaml - name: Export assets id: exfig uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: batch config: 'exfig.pkl' cache: true - name: Handle results run: | # Output values available: # assets_exported - Number of assets exported (e.g., "42") # changed_files - Newline-separated list of changed files # cache_hit - Whether cache was restored ("true"/"false") # exit_code - ExFig exit code ("0" for success) # failed_count - Number of failed configs in batch mode # duration - Execution time (e.g., "5s") # config_summary - Summary of configs processed # validated_count - Configs validated from cache (no changes) # exported_configs - Configs that exported new assets # error_category - Error type (RATE_LIMIT, TIMEOUT, AUTH, etc.) # error_message - First error message (truncated to 100 chars) # report_json - Raw JSON report content (batch mode) if [ "${{ steps.exfig.outputs.exit_code }}" != "0" ]; then echo "Export failed: ${{ steps.exfig.outputs.error_message }}" echo "Category: ${{ steps.exfig.outputs.error_category }}" exit 1 fi if [ "${{ steps.exfig.outputs.assets_exported }}" = "0" ]; then echo "No changes detected (cache hit)" else echo "Exported ${{ steps.exfig.outputs.assets_exported }} assets" fi ``` -------------------------------- ### Pass Extra CLI Arguments (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Shows how to pass additional command-line arguments directly to the ExFig CLI using the `extra_args` parameter. This allows for advanced customization of the export process. ```yaml - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons extra_args: '--force' ``` -------------------------------- ### Granular Cache (Experimental) (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Enables the experimental granular caching feature for potentially improved performance with large asset libraries. This allows for more fine-grained control over what is cached and re-exported. ```yaml - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons cache: true granular_cache: true ``` -------------------------------- ### Pin ExFig Version (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Demonstrates how to specify a particular version of the ExFig action to use. This ensures consistent behavior across runs by preventing unexpected updates from the action's main branch. ```yaml - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons version: 'v1.2.0' ``` -------------------------------- ### Restore Cache with actions/cache@v4 Source: https://github.com/alexey1312/exfig-action/blob/main/docs/caching.md Restores the ExFig cache using the `actions/cache/restore@v4` action. It utilizes a cache path and a key derived from a prefix and the GitHub run ID, with fallback restore keys to ensure cache retrieval even with minor key mismatches. This phase occurs before ExFig execution. ```yaml - uses: actions/cache/restore@v4 with: path: ${{ inputs.cache_path }} key: ${{ inputs.cache_key_prefix }}-${{ github.run_id }} restore-keys: | ${{ inputs.cache_key_prefix }}- ``` -------------------------------- ### Export Multiple Asset Types (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Shows how to use the ExFig action to export different types of assets (colors, icons, typography) in separate steps within the same job. Each export uses a unique cache key prefix for better cache management. ```yaml jobs: export: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Export colors uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: colors cache: true cache_key_prefix: exfig-colors - name: Export icons uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: icons cache: true cache_key_prefix: exfig-icons - name: Export typography uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: typography cache: true cache_key_prefix: exfig-typography ``` -------------------------------- ### Batch Export with Report (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Configures the ExFig action to perform a batch export of multiple configurations and generate a JSON report. The `fail_fast` option ensures the process stops immediately if any part of the batch fails. The report output is then processed using `jq`. ```yaml - uses: alexey1312/exfig-action@v2 id: exfig with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: batch config: 'exfig-colors.pkl, exfig-icons.pkl' cache: true fail_fast: true report: 'exfig-report.json' - name: Use report if: always() run: echo '${{ steps.exfig.outputs.report_json }}' | jq . ``` -------------------------------- ### Enable Granular Cache in ExFig Action Source: https://github.com/alexey1312/exfig-action/blob/main/docs/caching.md Enables the experimental granular caching feature in ExFig Action by setting both `cache` and `granular_cache` to `true`. This feature provides finer-grained caching at the individual asset level, which can be beneficial for large asset libraries or workflows with partial updates. ```yaml - uses: alexey1312/exfig-action@v2 with: cache: true granular_cache: true ``` -------------------------------- ### Slack Notification using Raw HTTPS Request Source: https://github.com/alexey1312/exfig-action/blob/main/AGENTS.md This TypeScript code demonstrates how to send a Slack notification using the built-in 'https' module. It emphasizes error handling by always resolving promises and resuming the response body to prevent socket leaks. ```typescript function sendSlackNotification(message: string): Promise { return new Promise((resolve) => { const postData = JSON.stringify({ text: message, }); const options = { hostname: 'hooks.slack.com', port: 443, path: '/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX', method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData), }, }; const req = https.request(options, (res) => { res.resume(); // Important: consume response data to free up the socket resolve(); }); req.on('error', (e) => { console.error(`Slack notification error: ${e.message}`); resolve(); // Non-fatal error, resolve the promise }); req.write(postData); req.end(); }); } ``` -------------------------------- ### Slack Notifications for Batch Exports (YAML) Source: https://github.com/alexey1312/exfig-action/blob/main/README.md Configures the ExFig action to send notifications to Slack upon completion or failure of a batch export. It includes options for specifying the Slack webhook URL and mentioning a user ID on failure. ```yaml - uses: alexey1312/exfig-action@v2 with: figma_token: ${{ secrets.FIGMA_TOKEN }} command: batch config: 'exfig/colors.pkl, exfig/icons.pkl' slack_webhook: ${{ secrets.SLACK_WEBHOOK }} slack_mention: 'U123456' # Mention on failure only (auto-formatted) ```