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.
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 →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
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
- Cancel superseded runs when a branch or PR gets a newer push.
- Cache dependency installs on the setup step so they are served from cache.
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:
- Dependency installs
This workflow runs 2 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.