chore: desktop workflow

This commit is contained in:
Mo
2022-06-11 20:37:41 -05:00
parent 2aac0294ef
commit 3b70495836
9 changed files with 214 additions and 78 deletions

View File

@@ -1,33 +0,0 @@
name: Desktop Dev
on:
push:
branches:
- develop
paths:
- packages/desktop/**
workflow_dispatch:
pull_request:
paths:
- packages/desktop/**
jobs:
build:
if: contains(github.event.head_commit.message, 'chore(release)') == false
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/desktop
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.x'
registry-url: 'https://registry.npmjs.org'
- run: yarn install
- run: yarn build:web:front
- run: node scripts/build.mjs appimage-x64
- uses: actions/upload-artifact@v2
with:
name: 'AppImage'
path: dist/*.AppImage

View File

@@ -0,0 +1,50 @@
name: Desktop Dev
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/desktop
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.x'
registry-url: 'https://registry.npmjs.org'
- run: yarn install
- run: yarn build
Linux:
runs-on: ubuntu-latest
needs: build
steps:
- name: Compile for AppImage
run: yarn run webpack --config desktop.webpack.prod.js
- name: AppImage
run: yarn run electron-builder --linux --x64 --ia32 -c.linux.target=AppImage --publish=never
- name: Snap
run: yarn run webpack --config desktop.webpack.prod.js --env snap'
run: yarn run electron-builder --linux --x64 -c.linux.target=snap --publish=never
- name: Upload
uses: actions/upload-artifact@v3.0.0
with:
name: assets
path: 'dist/'
Publish:
runs-on: ubuntu-latest
needs: [Linux]
steps:
- uses: actions/download-artifact@v3
with:
name: assets
path: dist
- run: node scripts/sums.mjs
- run: node scripts/create-draft-release.mjs

110
.github/workflows/desktop.release.yml vendored Normal file
View File

@@ -0,0 +1,110 @@
name: Desktop Dev
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/desktop
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.x'
registry-url: 'https://registry.npmjs.org'
- run: yarn install
- run: yarn build
Mac:
runs-on: macos-latest
needs: build
steps:
- name: Compile Mac
run: yarn run webpack --config desktop.webpack.prod.js
- name: MacX64
run: yarn run electron-builder --mac --x64 --publish=never
run: node scripts/fix-mac-zip
- name: MacArm64
run: yarn run electron-builder --mac --arm64 --publish=never
- name: Upload
uses: actions/upload-artifact@v3.0.0
with:
name: assets
path: 'dist/'
Linux:
runs-on: ubuntu-latest
needs: build
steps:
- name: Compile for AppImage
run: yarn run webpack --config desktop.webpack.prod.js
- name: AppImage
run: yarn run electron-builder --linux --x64 --ia32 -c.linux.target=AppImage --publish=never
- name: AppImageX64
run: yarn run electron-builder --linux --x64 -c.linux.target=AppImage --publish=never
- name: AppImageArm64
run: yarn run electron-builder --linux --arm64 -c.linux.target=AppImage --publish=never
- name: Deb
run: yarn run webpack --config desktop.webpack.prod.js --env deb
run: yarn run electron-builder --linux --x64 --ia32 -c.linux.target=deb --publish=never
- name: DebArm64
env:
npm_config_target_arch: 'arm64'
USE_SYSTEM_FPM: 'true'
run: yarn run webpack --config desktop.webpack.prod.js --env deb
run: yarn run electron-builder --linux --arm64 -c.linux.target=deb --publish=never
- name: Dir
run: yarn run webpack --config desktop.webpack.prod.js
run: yarn run electron-builder --linux --x64 -c.linux.target=dir --publish=never
- name: DirArm64
run: yarn run webpack --config desktop.webpack.prod.js
run: yarn run electron-builder --linux --arm64 -c.linux.target=dir --publish=never
env:
npm_config_target_arch: 'arm64'
- name: Snap
run: yarn run webpack --config desktop.webpack.prod.js --env snap'
run: yarn run electron-builder --linux --x64 -c.linux.target=snap --publish=never
- name: SnapArm64
run: yarn run webpack --config desktop.webpack.prod.js --env snap'
run: yarn run electron-builder --linux --arm64 -c.linux.target=snap --publish=never
env:
npm_config_target_arch: 'arm64'
SNAPCRAFT_BUILD_ENVIRONMENT: 'host'
- name: Upload
uses: actions/upload-artifact@v3.0.0
with:
name: assets
path: 'dist/'
Windows:
runs-on: windows-latest
needs: build
steps:
- run: yarn run webpack --config desktop.webpack.prod.js
- name: Windows
run: yarn run electron-builder --windows --x64 --ia32 --publish=never
- name: Upload
uses: actions/upload-artifact@v3.0.0
with:
name: assets
path: 'dist/'
Publish:
runs-on: ubuntu-latest
needs: [Windows, Linux, Mac]
steps:
- uses: actions/download-artifact@v3
with:
name: assets
path: dist
- run: node scripts/sums.mjs
- run: node scripts/create-draft-release.mjs
- run: node scripts/publishSnap.mjs

View File

@@ -16,7 +16,6 @@ jobs:
working-directory: packages/mobile
runs-on: ubuntu-latest
timeout-minutes: 45
if: "!contains(github.event.head_commit.message, 'skip ci')"
steps:
- name: Checkout code
uses: actions/checkout@v2
@@ -57,7 +56,6 @@ jobs:
working-directory: packages/mobile
runs-on: macos-11
timeout-minutes: 90
if: "!contains(github.event.head_commit.message, 'skip ci')"
steps:
- name: Checkout code
uses: actions/checkout@v2

View File

@@ -0,0 +1,7 @@
export const Command = function (prompt, dir, extraEnv = {}) {
return {
prompt,
dir,
extraEnv,
}
}

View File

@@ -1,13 +1,14 @@
import { spawn } from 'child_process'
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
import { Command } from './Command'
import { publishSnap } from './publishSnap'
import { runCommand } from './runCommand'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const RootDir = path.join(__dirname, '../../..')
const DesktopDir = path.join(__dirname, '../')
export const DesktopDir = path.join(__dirname, '../')
const ScriptsDir = path.join(__dirname)
async function buildTargets(targets) {
@@ -34,30 +35,6 @@ async function buildTargets(targets) {
}
}
function runCommand(commandObj) {
return new Promise((resolve, reject) => {
const { prompt, extraEnv } = commandObj
console.log(prompt, Object.keys(extraEnv).length > 0 ? extraEnv : '')
const [command, ...args] = prompt.split(' ')
const options = { cwd: commandObj.dir, env: Object.assign({}, process.env, extraEnv) }
const child = spawn(command, args, options)
child.stdout.pipe(process.stdout)
child.stderr.pipe(process.stderr)
child.on('error', reject)
child.on('close', (code) => {
if (code > 0) {
reject(code)
} else {
resolve(code)
}
})
})
}
const Targets = {
Appimage: 'appimage',
AppimageArm64: 'appimage-arm64',
@@ -102,14 +79,6 @@ const TargetGroups = {
const arm64Env = { npm_config_target_arch: 'arm64' }
const Command = function (prompt, dir, extraEnv = {}) {
return {
prompt,
dir,
extraEnv,
}
}
const CompileGroups = [
{
compileCommand: Command('yarn run webpack --config desktop.webpack.prod.js', DesktopDir),
@@ -192,12 +161,6 @@ const BuildCommands = {
[Targets.Windows]: [Command('yarn run electron-builder --windows --x64 --ia32 --publish=never', DesktopDir)],
}
async function publishSnap() {
const packageJson = await fs.promises.readFile(path.join(DesktopDir, 'package.json'))
const version = JSON.parse(packageJson).version
await runCommand(Command(`snapcraft upload dist/standard-notes-${version}-linux-amd64.snap`, DesktopDir))
}
;(async () => {
try {
const input = process.argv[2]

View File

@@ -0,0 +1,11 @@
import fs from 'fs'
import path from 'path'
import { Command } from './Command'
import { runCommand } from './runCommand'
import { DesktopDir } from './build'
export async function publishSnap() {
const packageJson = await fs.promises.readFile(path.join(DesktopDir, 'package.json'))
const version = JSON.parse(packageJson).version
await runCommand(Command(`snapcraft upload dist/standard-notes-${version}-linux-amd64.snap`, DesktopDir))
}

View File

@@ -0,0 +1,25 @@
import { spawn } from 'child_process'
export function runCommand(commandObj) {
return new Promise((resolve, reject) => {
const { prompt, extraEnv } = commandObj
console.log(prompt, Object.keys(extraEnv).length > 0 ? extraEnv : '')
const [command, ...args] = prompt.split(' ')
const options = { cwd: commandObj.dir, env: Object.assign({}, process.env, extraEnv) }
const child = spawn(command, args, options)
child.stdout.pipe(process.stdout)
child.stderr.pipe(process.stderr)
child.on('error', reject)
child.on('close', (code) => {
if (code > 0) {
reject(code)
} else {
resolve(code)
}
})
})
}

View File

@@ -23,8 +23,13 @@ function sha256(filePath) {
let hashes = await Promise.all(
files.map(async (fileName) => {
const hash = await sha256(fileName)
return `${hash} ${fileName}`
try {
const hash = await sha256(fileName)
return `${hash} ${fileName}`
} catch (error) {
console.error('Unable to hash file', fileName)
return null
}
}),
)
hashes = hashes.join('\n')