diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ba22b1230..b8bb2b084 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,8 +1,6 @@ -name: Build DevBuild +name: Build releases on: push: - branches: - - main paths: - .github/workflows/build.yml - src/** @@ -45,21 +43,39 @@ jobs: rm -rf dist/*-unpacked dist/monaco Vencord.user.css vencordDesktopRenderer.css vencordDesktopRenderer.css.map - name: Get some values needed for the release - id: release_values run: | - echo "release_tag=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + echo "commit_short=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + gh release view devbuild &> /dev/null \ + && echo "devbuild_exists=true" >> $GITHUB_ENV \ + || echo "devbuild_exists=false" >> $GITHUB_ENV - - name: Upload DevBuild as release - if: github.repository == 'Vendicated/Vencord' + - name: Upload latest release (devbuild) + if: env.devbuild_exists == 'true' && startsWith(github.ref, 'refs/heads/') && github.ref_name == 'main' && github.event.created run: | gh release upload devbuild --clobber dist/* - gh release edit devbuild --title "DevBuild $RELEASE_TAG" + gh release edit devbuild --title "DevBuild $COMMIT_SHORT" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload branch release + if: env.devbuild_exists == 'true' && startsWith(github.ref, 'refs/heads/') && github.ref_name != 'main' && github.event.created + run: | + gh release create branch-$GITHUB_REF_NAME --latest=false --prerelease --title "PreBuild $GITHUB_REF_NAME" || true + gh release upload branch-$GITHUB_REF_NAME --clobber dist/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload commit release + if: env.devbuild_exists == 'true' && startsWith(github.ref, 'refs/heads/') && github.event.created + continue-on-error: true + run: | + gh release create commit-$COMMIT_SHORT --latest=false --prerelease --title "PreBuild $COMMIT_SHORT" + gh release upload commit-$COMMIT_SHORT --clobber dist/* env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE_TAG: ${{ env.release_tag }} - name: Upload DevBuild to builds repo - if: github.repository == 'Vendicated/Vencord' + if: env.devbuild_exists == 'true' && startsWith(github.ref, 'refs/heads/') && github.ref_name == 'main' && github.event.created run: | git config --global user.name "$USERNAME" git config --global user.email actions@github.com diff --git a/src/VencordNative.ts b/src/VencordNative.ts index 42e697452..27f5ae743 100644 --- a/src/VencordNative.ts +++ b/src/VencordNative.ts @@ -40,6 +40,7 @@ export default { }, updater: { + setUpdateSource: (source: "latest" | "branch" | "commit", name: string) => invoke(IpcEvents.SET_UPDATE_SOURCE, source, name), getUpdates: () => invoke[]>>(IpcEvents.GET_UPDATES), update: () => invoke>(IpcEvents.UPDATE), rebuild: () => invoke>(IpcEvents.BUILD), diff --git a/src/main/updater/git.ts b/src/main/updater/git.ts index 1955f7dce..ed61339a8 100644 --- a/src/main/updater/git.ts +++ b/src/main/updater/git.ts @@ -25,6 +25,7 @@ import { promisify } from "util"; import { serializeErrors } from "./common"; const VENCORD_SRC_DIR = join(__dirname, ".."); +const REMOTE_NAME = "origin"; const execFile = promisify(cpExecFile); @@ -40,7 +41,7 @@ function git(...args: string[]) { } async function getRepo() { - const res = await git("remote", "get-url", "origin"); + const res = await git("remote", "get-url", REMOTE_NAME); return res.stdout.trim() .replace(/git@(.+):/, "https://$1/") .replace(/\.git$/, ""); @@ -51,10 +52,10 @@ async function calculateGitChanges() { const branch = (await git("branch", "--show-current")).stdout.trim(); - const existsOnOrigin = (await git("ls-remote", "origin", branch)).stdout.length > 0; - if (!existsOnOrigin) return []; + const existsOnRemote = (await git("ls-remote", REMOTE_NAME, branch)).stdout.length > 0; + if (!existsOnRemote) return []; - const res = await git("log", `HEAD...origin/${branch}`, "--pretty=format:%an/%h/%s"); + const res = await git("log", `HEAD...${REMOTE_NAME}/${branch}`, "--pretty=format:%an/%h/%s"); const commits = res.stdout.trim(); return commits ? commits.split("\n").map(line => { @@ -84,7 +85,12 @@ async function build() { return !res.stderr.includes("Build failed"); } +async function setUpdateSource() { + // noop +} + ipcMain.handle(IpcEvents.GET_REPO, serializeErrors(getRepo)); ipcMain.handle(IpcEvents.GET_UPDATES, serializeErrors(calculateGitChanges)); ipcMain.handle(IpcEvents.UPDATE, serializeErrors(pull)); ipcMain.handle(IpcEvents.BUILD, serializeErrors(build)); +ipcMain.handle(IpcEvents.SET_UPDATE_SOURCE, serializeErrors(setUpdateSource)); diff --git a/src/main/updater/http.ts b/src/main/updater/http.ts index 9d42b5c69..aed573b55 100644 --- a/src/main/updater/http.ts +++ b/src/main/updater/http.ts @@ -30,6 +30,7 @@ import { serializeErrors, VENCORD_FILES } from "./common"; const API_BASE = `https://api.github.com/repos/${gitRemote}`; let PendingUpdates = [] as [string, string][]; +let UpdateSource = { release: "latest", ref: "HEAD" }; async function githubGet(endpoint: string) { return get(API_BASE + endpoint, { @@ -84,7 +85,14 @@ async function applyUpdates() { return true; } +async function setUpdateSource(source: "latest" | "branch" | "commit", name: string) { + if (source === "latest") UpdateSource = { release: "latest", ref: "HEAD" }; + else if (source === "branch") UpdateSource = { release: `/tags/branch-${name}`, ref: `refs/heads/${name}` }; + else if (source === "commit") UpdateSource = { release: `/tags/commit-${name}`, ref: name }; +} + ipcMain.handle(IpcEvents.GET_REPO, serializeErrors(() => `https://github.com/${gitRemote}`)); ipcMain.handle(IpcEvents.GET_UPDATES, serializeErrors(calculateGitChanges)); ipcMain.handle(IpcEvents.UPDATE, serializeErrors(fetchUpdates)); ipcMain.handle(IpcEvents.BUILD, serializeErrors(applyUpdates)); +ipcMain.handle(IpcEvents.SET_UPDATE_SOURCE, serializeErrors(setUpdateSource)); diff --git a/src/shared/IpcEvents.ts b/src/shared/IpcEvents.ts index 2027df9cf..c8e9b8b3a 100644 --- a/src/shared/IpcEvents.ts +++ b/src/shared/IpcEvents.ts @@ -32,6 +32,7 @@ export const enum IpcEvents { SET_SETTINGS = "VencordSetSettings", OPEN_EXTERNAL = "VencordOpenExternal", OPEN_QUICKCSS = "VencordOpenQuickCss", + SET_UPDATE_SOURCE = "VencordSetUpdateSource", GET_UPDATES = "VencordGetUpdates", GET_REPO = "VencordGetRepo", UPDATE = "VencordUpdate",