diff --git a/.github/workflows/desktop.dev.yml b/.github/workflows/desktop.dev.yml deleted file mode 100644 index aef5dde1d..000000000 --- a/.github/workflows/desktop.dev.yml +++ /dev/null @@ -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 diff --git a/.github/workflows/desktop.release.test.yml b/.github/workflows/desktop.release.test.yml new file mode 100644 index 000000000..42ec8436a --- /dev/null +++ b/.github/workflows/desktop.release.test.yml @@ -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 diff --git a/.github/workflows/desktop.release.yml b/.github/workflows/desktop.release.yml new file mode 100644 index 000000000..f934a15ad --- /dev/null +++ b/.github/workflows/desktop.release.yml @@ -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 diff --git a/.github/workflows/mobile.build-dev.yml b/.github/workflows/mobile.build-dev.yml index f033e1abc..7d24b0284 100644 --- a/.github/workflows/mobile.build-dev.yml +++ b/.github/workflows/mobile.build-dev.yml @@ -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 diff --git a/packages/desktop/scripts/Command.mjs b/packages/desktop/scripts/Command.mjs new file mode 100644 index 000000000..5f9cf21de --- /dev/null +++ b/packages/desktop/scripts/Command.mjs @@ -0,0 +1,7 @@ +export const Command = function (prompt, dir, extraEnv = {}) { + return { + prompt, + dir, + extraEnv, + } +} diff --git a/packages/desktop/scripts/build.mjs b/packages/desktop/scripts/build.mjs index 301eff530..5999aeb9c 100644 --- a/packages/desktop/scripts/build.mjs +++ b/packages/desktop/scripts/build.mjs @@ -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] diff --git a/packages/desktop/scripts/publishSnap.mjs b/packages/desktop/scripts/publishSnap.mjs new file mode 100644 index 000000000..b6ec2f1e3 --- /dev/null +++ b/packages/desktop/scripts/publishSnap.mjs @@ -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)) +} diff --git a/packages/desktop/scripts/runCommand.mjs b/packages/desktop/scripts/runCommand.mjs new file mode 100644 index 000000000..7549962bf --- /dev/null +++ b/packages/desktop/scripts/runCommand.mjs @@ -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) + } + }) + }) +} diff --git a/packages/desktop/scripts/sums.mjs b/packages/desktop/scripts/sums.mjs index a083c3de8..c5a0428e7 100644 --- a/packages/desktop/scripts/sums.mjs +++ b/packages/desktop/scripts/sums.mjs @@ -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')