Skip to content
Latchkey

KIRA-Slack: Final Legacy Release workflow (krafton-ai/KIRA)

The KIRA-Slack: Final Legacy Release workflow from krafton-ai/KIRA, explained and optimized by Latchkey.

C

CI health: C - fair

Run this on Latchkey for self-healing, caching, and up to 58% lower cost.

Grade your own workflow free or run it on Latchkey →
Source: krafton-ai/KIRA.github/workflows/deploy-kira-slack-legacy.ymlLicense Apache-2.0View source

What it does

This is the KIRA-Slack: Final Legacy Release workflow from the krafton-ai/KIRA repository, a real project running GitHub Actions. It is shown here with attribution under its Apache-2.0 license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

The workflow

workflow (.yml)
name: "KIRA-Slack: Final Legacy Release"

on:
  push:
    tags:
      - 'slack-v*'

env:
  NODE_VERSION: "22"
  SLACK_WORKING_DIR: KIRA-Slack/electron-app

jobs:
  deploy-mac:
    name: Build and Deploy macOS KIRA-Slack Legacy App
    runs-on: self-hosted
    timeout-minutes: 120

    steps:
      - name: Checkout code
        uses: actions/checkout@v6

      - name: Load nvm and verify Node.js
        run: |
          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
          node --version
          npm --version

      - name: Unlock Keychain
        run: |
          security unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" ~/Library/Keychains/login.keychain-db
          security set-keychain-settings -t 7200 ~/Library/Keychains/login.keychain-db

      - name: Setup AWS CLI
        run: |
          which aws || brew install awscli
          aws --version

      - name: Install dependencies
        run: |
          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
          cd ${{ env.SLACK_WORKING_DIR }}
          npm ci

      - name: Extract version from tag and update package version
        run: |
          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
          VERSION=${GITHUB_REF_NAME#slack-v}
          echo "📦 Version: $VERSION"
          VERSION="$VERSION" node -e 'const fs=require("fs"); const file=process.argv[1]; const pkg=JSON.parse(fs.readFileSync(file,"utf8")); pkg.version=process.env.VERSION; fs.writeFileSync(file, `${JSON.stringify(pkg, null, 2)}\n`);' "${{ env.SLACK_WORKING_DIR }}/package.json"

      - name: Build and Deploy macOS KIRA-Slack Legacy App
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: ap-northeast-2
          APPLE_ID: ${{ secrets.APPLE_ID }}
          APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
          APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
          CSC_LINK: ${{ secrets.CSC_LINK }}
          CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
        run: |
          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
          cd ${{ env.SLACK_WORKING_DIR }}
          npm run deploy:mac

      - name: Upload macOS artifacts
        uses: actions/upload-artifact@v6
        with:
          name: legacy-macos-build-${{ github.ref_name }}
          path: |
            ${{ env.SLACK_WORKING_DIR }}/dist/*.dmg
            ${{ env.SLACK_WORKING_DIR }}/dist/*.zip
          retention-days: 30

  deploy-windows:
    name: Build and Deploy Windows KIRA-Slack Legacy App
    runs-on: windows-latest
    timeout-minutes: 60

    steps:
      - name: Checkout code
        uses: actions/checkout@v6

      - name: Setup Node.js
        uses: actions/setup-node@v6
        with:
          node-version: ${{ env.NODE_VERSION }}

      - name: Install dependencies
        run: |
          cd ${{ env.SLACK_WORKING_DIR }}
          npm ci

      - name: Extract version from tag and update package version
        shell: bash
        run: |
          VERSION=${GITHUB_REF_NAME#slack-v}
          echo "📦 Version: $VERSION"
          VERSION="$VERSION" node -e 'const fs=require("fs"); const file=process.argv[1]; const pkg=JSON.parse(fs.readFileSync(file,"utf8")); pkg.version=process.env.VERSION; fs.writeFileSync(file, `${JSON.stringify(pkg, null, 2)}\n`);' "${{ env.SLACK_WORKING_DIR }}/package.json"

      - name: Build and Deploy Windows KIRA-Slack Legacy App
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: ap-northeast-2
          CSC_IDENTITY_AUTO_DISCOVERY: false
        run: |
          cd ${{ env.SLACK_WORKING_DIR }}
          npm run deploy:win

      - name: Upload Windows artifacts
        uses: actions/upload-artifact@v6
        with:
          name: legacy-windows-build-${{ github.ref_name }}
          path: |
            ${{ env.SLACK_WORKING_DIR }}/dist/*.exe
          retention-days: 30

The same workflow, on Latchkey

Estimated ~20% faster on cache hits, plus fewer wasted runs and a safer supply chain. Added and changed lines are highlighted.

name: "KIRA-Slack: Final Legacy Release"
 
on:
  push:
    tags:
      - 'slack-v*'
 
env:
  NODE_VERSION: "22"
  SLACK_WORKING_DIR: KIRA-Slack/electron-app
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  deploy-mac:
    name: Build and Deploy macOS KIRA-Slack Legacy App
    runs-on: self-hosted
    timeout-minutes: 120
 
    steps:
      - name: Checkout code
        uses: actions/checkout@v6
 
      - name: Load nvm and verify Node.js
        run: |
          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
          node --version
          npm --version
 
      - name: Unlock Keychain
        run: |
          security unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" ~/Library/Keychains/login.keychain-db
          security set-keychain-settings -t 7200 ~/Library/Keychains/login.keychain-db
 
      - name: Setup AWS CLI
        run: |
          which aws || brew install awscli
          aws --version
 
      - name: Install dependencies
        run: |
          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
          cd ${{ env.SLACK_WORKING_DIR }}
          npm ci
 
      - name: Extract version from tag and update package version
        run: |
          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
          VERSION=${GITHUB_REF_NAME#slack-v}
          echo "📦 Version: $VERSION"
          VERSION="$VERSION" node -e 'const fs=require("fs"); const file=process.argv[1]; const pkg=JSON.parse(fs.readFileSync(file,"utf8")); pkg.version=process.env.VERSION; fs.writeFileSync(file, `${JSON.stringify(pkg, null, 2)}\n`);' "${{ env.SLACK_WORKING_DIR }}/package.json"
 
      - name: Build and Deploy macOS KIRA-Slack Legacy App
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: ap-northeast-2
          APPLE_ID: ${{ secrets.APPLE_ID }}
          APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
          APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
          CSC_LINK: ${{ secrets.CSC_LINK }}
          CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
        run: |
          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
          cd ${{ env.SLACK_WORKING_DIR }}
          npm run deploy:mac
 
      - name: Upload macOS artifacts
        uses: actions/upload-artifact@v6
        with:
          name: legacy-macos-build-${{ github.ref_name }}
          path: |
            ${{ env.SLACK_WORKING_DIR }}/dist/*.dmg
            ${{ env.SLACK_WORKING_DIR }}/dist/*.zip
          retention-days: 30
 
  deploy-windows:
    name: Build and Deploy Windows KIRA-Slack Legacy App
    runs-on: windows-latest
    timeout-minutes: 60
 
    steps:
      - name: Checkout code
        uses: actions/checkout@v6
 
      - name: Setup Node.js
        uses: actions/setup-node@v6
        with:
          cache: 'npm'
          node-version: ${{ env.NODE_VERSION }}
 
      - name: Install dependencies
        run: |
          cd ${{ env.SLACK_WORKING_DIR }}
          npm ci
 
      - name: Extract version from tag and update package version
        shell: bash
        run: |
          VERSION=${GITHUB_REF_NAME#slack-v}
          echo "📦 Version: $VERSION"
          VERSION="$VERSION" node -e 'const fs=require("fs"); const file=process.argv[1]; const pkg=JSON.parse(fs.readFileSync(file,"utf8")); pkg.version=process.env.VERSION; fs.writeFileSync(file, `${JSON.stringify(pkg, null, 2)}\n`);' "${{ env.SLACK_WORKING_DIR }}/package.json"
 
      - name: Build and Deploy Windows KIRA-Slack Legacy App
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: ap-northeast-2
          CSC_IDENTITY_AUTO_DISCOVERY: false
        run: |
          cd ${{ env.SLACK_WORKING_DIR }}
          npm run deploy:win
 
      - name: Upload Windows artifacts
        uses: actions/upload-artifact@v6
        with:
          name: legacy-windows-build-${{ github.ref_name }}
          path: |
            ${{ env.SLACK_WORKING_DIR }}/dist/*.exe
          retention-days: 30
 

What changed

What Latchkey heals here

This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:

This workflow runs 2 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow