# Build electerm for loong64 (LoongArch64) Linux # # This workflow: # 1. Builds x64 version with electron v39.2.7 to get the asar # 2. Downloads electron loong64 v39.2.7 # 3. Cross-compiles native modules for loong64 # 4. Merges x64 asar with loong64 electron and native modules # 5. Uploads tar.gz to GitHub release draft # 6. Builds deb package and uploads to GitHub release draft # 7. Optionally uploads to R2 name: linux-loong64 on: push: branches: [ build, test, build-only, linux-loong64 ] jobs: build: runs-on: ubuntu-24.04 environment: build if: ${{ !contains(github.event.head_commit.message, '[skip build]') && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip linux]') && !contains(github.event.head_commit.message, '[skip loong64]') }} steps: - uses: actions/checkout@v4 - name: Use Node.js 24.x uses: actions/setup-node@v4 with: node-version: 24.x - name: Install loong64 cross-compiler run: | sudo add-apt-repository -y universe sudo apt-get update sudo apt-get install -y gcc-14-loongarch64-linux-gnu g++-14-loongarch64-linux-gnu binutils-loongarch64-linux-gnu || \ sudo apt-get install -y gcc-loongarch64-linux-gnu g++-loongarch64-linux-gnu binutils-loongarch64-linux-gnu which loongarch64-linux-gnu-gcc 2>/dev/null || sudo ln -sf /usr/bin/loongarch64-linux-gnu-gcc-14 /usr/bin/loongarch64-linux-gnu-gcc || true which loongarch64-linux-gnu-g++ 2>/dev/null || sudo ln -sf /usr/bin/loongarch64-linux-gnu-g++-14 /usr/bin/loongarch64-linux-gnu-g++ || true - run: rm package-lock.json - run: npm config set legacy-peer-deps true - name: Update electron version to v39.2.7 run: | node -e " const fs = require('fs'); const pkg = JSON.parse(fs.readFileSync('package.json')); pkg.devDependencies.electron = '39.2.7'; fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n'); console.log('Electron version set to 39.2.7'); " - name: Install dependencies run: | npm config set legacy-peer-deps true npm install -g yarn npm i - name: Build loong64 env: WORKFLOW_NAME: linux-loong64 GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} BUILD_NUMBER: ${{ secrets.BUILD_NUMBER }} run: bash build/bin/build-linux-loong64.sh - name: Verify output run: | ls -la dist-loong64/*.tar.gz dist-loong64/*.deb file dist-loong64/electerm-*/electerm find dist-loong64/electerm-* -name "*.node" -exec file {} \; | grep LoongArch - name: Upload to R2 if: ${{ contains(github.event.head_commit.message, '[r2]') }} env: CF_R2_BUCKET: ${{ secrets.CF_R2_BUCKET }} run: | mkdir -p ~/.aws cat > ~/.aws/credentials << EOF [default] aws_access_key_id = ${{ secrets.CF_R2_ACCESS_KEY_ID }} aws_secret_access_key = ${{ secrets.CF_R2_SECRET_ACCESS_KEY }} EOF cat > ~/.aws/config << EOF [default] region = auto endpoint_url = ${{ secrets.CF_R2_ENDPOINT }} EOF for file in $(find dist-loong64 \( -name "*.tar.gz" -o -name "*.deb" \) -type f); do filename=$(basename "$file") aws s3 cp "$file" "s3://${CF_R2_BUCKET}/${filename}" \ --acl public-read \ --cache-control "max-age=31536000" echo "Uploaded: ${filename}" done