Skip to content

@Desktop • Build App (external) triggered by lawRathod on ref forked/62b85ebbc89d7d3c8adc3b73b4220455750a1762 #506

@Desktop • Build App (external) triggered by lawRathod on ref forked/62b85ebbc89d7d3c8adc3b73b4220455750a1762

@Desktop • Build App (external) triggered by lawRathod on ref forked/62b85ebbc89d7d3c8adc3b73b4220455750a1762 #506

name: "@Desktop • Build App (external)"
run-name: "@Desktop • Build App (external) triggered by ${{ inputs.login }} ${{ format('on ref {0}', github.ref_name) }}"
on:
workflow_dispatch:
inputs:
ref:
description: |
If you run this manually, and want to run on a PR, the correct ref should be refs/pull/{PR_NUMBER}/merge to
have the "normal" scenario involving checking out a merge commit between your branch and the base branch.
If you want to run only on a branch or specific commit, you can use either the sha or the branch name instead (prefer the first verion for PRs).
required: false
login:
description: The GitHub username that triggered the workflow
required: false
base_ref:
description: The base branch to merge the head into when checking out the code
required: false
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name != 'develop' && github.ref || github.run_id }}
cancel-in-progress: true
jobs:
build-desktop-app:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
name: "Build Ledger Live Desktop"
runs-on: ${{ matrix.os }}
outputs:
linux: ${{ steps.save-result.outputs.ubuntu-latest }}
windows: ${{ steps.save-result.outputs.windows-latest }}
mac: ${{ steps.save-result.outputs.macos-latest }}
env:
NODE_OPTIONS: "--max-old-space-size=7168"
steps:
- name: Format os name
id: os
uses: actions/github-script@v6
with:
result-encoding: string
script: |
if ("${{ matrix.os }}" === "ubuntu-latest") {
return "linux"
} else if ("${{ matrix.os }}" === "macos-latest") {
return "mac"
} else if ("${{ matrix.os }}" === "windows-latest") {
return "win"
}
- uses: actions/checkout@v4
with:
ref: ${{ github.ref_name }}
persist-credentials: false
- name: Setup git user
uses: LedgerHQ/ledger-live/tools/actions/composites/setup-git-user@develop
- uses: actions/setup-python@v4
with:
python-version: "3.x"
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.3.0
bundler-cache: true
- name: Setup the toolchain
uses: LedgerHQ/ledger-live/tools/actions/composites/setup-toolchain@develop
with:
upgrade_npm: ${{ matrix.os == 'windows-latest' }}
- name: Build desktop
uses: LedgerHQ/ledger-live/tools/actions/composites/setup-build-desktop@develop
id: build-desktop
with:
os: ${{ steps.os.outputs.result }}
- name: Build the app
id: build-app
run: pnpm build:lld
- name: Save result
id: save-result
shell: bash
if: ${{ !cancelled() }}
run: |
echo "${{matrix.os}}=${{steps.build-app.outcome}}" >> $GITHUB_OUTPUT
- name: Upload linux app
if: matrix.os == 'ubuntu-latest'
uses: actions/upload-artifact@v4
with:
name: ${{ steps.build-desktop.outputs.version }}-linux-x86_64.AppImage
path: ${{ github.workspace }}/apps/ledger-live-desktop/dist/${{ steps.build-desktop.outputs.name }}-${{ steps.build-desktop.outputs.version }}-linux-x86_64.AppImage
- name: Upload macOS app
if: matrix.os == 'macos-latest'
uses: actions/upload-artifact@v4
with:
name: ${{ steps.build-desktop.outputs.version }}-mac.dmg
path: ${{ github.workspace }}/apps/ledger-live-desktop/dist/${{ steps.build-desktop.outputs.name }}-${{ steps.build-desktop.outputs.version }}-mac.dmg
- name: Upload windows
if: matrix.os == 'windows-latest'
uses: actions/upload-artifact@v4
with:
name: ${{ steps.build-desktop.outputs.version }}-win-x64.exe
path: ${{ github.workspace }}/apps/ledger-live-desktop/dist/${{ steps.build-desktop.outputs.name }}-${{ steps.build-desktop.outputs.version }}-win-x64.exe
report:
needs: build-desktop-app
runs-on: ubuntu-latest
if: ${{ !cancelled() && github.event_name == 'workflow_dispatch' }}
steps:
- uses: actions/github-script@v6
name: Get statuses of runs
id: status
with:
script: |
const fs = require("fs");
const [ owner, repo ] = "${{ github.repository }}".split("/");
const jobs = await github.paginate(github.rest.actions.listJobsForWorkflowRunAttempt, {
owner,
repo,
run_id: "${{ github.run_id }}",
attempt_number: "${{ github.run_attempt }}",
});
const findJobUrl = os =>
jobs.find(job => job.name == `Build Ledger Live Desktop (${os})`)?.html_url;
const keys = {
mac: {
symbol: "🍏",
name: "macOS",
jobUrl: findJobUrl("macos-latest")
},
windows: {
symbol: "🪟",
name: "Windows",
jobUrl: findJobUrl("windows-latest")
},
linux: {
symbol: "🐧",
name: "Linux",
jobUrl: findJobUrl("ubuntu-latest")
},
};
const report = {
mac: {
pass: ${{ needs.build-desktop-app.outputs.mac == 'success' }},
status: "${{ needs.build-desktop-app.outputs.mac }}",
},
linux: {
pass: ${{ needs.build-desktop-app.outputs.linux == 'success' }},
status: "${{ needs.build-desktop-app.outputs.linux }}",
},
windows: {
pass: ${{ needs.build-desktop-app.outputs.windows == 'success' }},
status: "${{ needs.build-desktop-app.outputs.windows }}",
},
};
let summary = ``;
summary += `|`
const reportKeys = Object.keys(report);
reportKeys.forEach((k) => {
summary += ` [${keys[k].symbol} ${keys[k].name}](${keys[k].jobUrl}) |`;
});
summary += `
|`;
for (let i = 0; i < reportKeys.length; i++) {
summary += ` :--: |`;
}
summary += `
|`;
Object.entries(report).forEach(([os, values]) => {
summary += ` ${values.pass ? "✅" : "❌"} (${values.status}) |`;
});
summary += `
[⚙️ Summary](https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${{ github.run_id }})
`;
const data = {
summary,
}
fs.writeFileSync("summary.json", JSON.stringify(data), "utf-8");
- uses: actions/upload-artifact@v4
name: Upload output
with:
path: ${{ github.workspace }}/summary.json
name: summary.json