Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 34 additions & 15 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Nightly
run-name: "OpenVCS Nightly • Run #${{ github.run_number }} • Dev @ ${{ github.sha }}"
run-name: "OpenVCS Nightly • Run #${{ github.run_number }} • ${{ github.event_name == 'workflow_dispatch' && github.ref_name || 'Dev' }}"

on:
schedule:
Expand All @@ -17,9 +17,13 @@ on:
permissions:
contents: read

env:
# Scheduled runs should always build from Dev. Manual runs should build from the selected branch.
TARGET_REF: ${{ github.event_name == 'workflow_dispatch' && github.ref_name || 'Dev' }}

jobs:
check-changes:
name: Check if Dev changed since last nightly
name: Check if target ref changed since last nightly
runs-on: ubuntu-22.04
permissions:
contents: read
Expand All @@ -28,10 +32,10 @@ jobs:
since_sha: ${{ steps.diff.outputs.since_sha }}
ahead_count: ${{ steps.diff.outputs.ahead_count }}
steps:
- name: Checkout Dev
- name: Checkout target ref
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
ref: Dev
ref: ${{ env.TARGET_REF }}
fetch-depth: 0 # we need history and tags
lfs: false

Expand Down Expand Up @@ -88,10 +92,10 @@ jobs:
args: ''
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout Dev
- name: Checkout target ref
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
ref: Dev
ref: ${{ env.TARGET_REF }}
fetch-depth: 0
lfs: true

Expand All @@ -100,13 +104,22 @@ jobs:
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
with:
script: |
const short = context.sha.substring(0, 7);
const date = new Date().toISOString().slice(0, 10); // UTC date
const owner = context.repo.owner;
const repo = context.repo.repo;
const basehead = 'openvcs-nightly...Dev';
const target = process.env.TARGET_REF || 'Dev';
let branch_sha = context.sha;
try {
const branch = await github.rest.repos.getBranch({ owner, repo, branch: target });
branch_sha = branch?.data?.commit?.sha || context.sha;
} catch (e) {
// Fall back to workflow SHA if the branch lookup fails.
branch_sha = context.sha;
}
const short = branch_sha.substring(0, 7);
const basehead = `openvcs-nightly...${target}`;
let compare_url = `${context.serverUrl}/${owner}/${repo}/compare/${basehead}`;
let commit_url = `${context.serverUrl}/${owner}/${repo}/commit/${context.sha}`;
let commit_url = `${context.serverUrl}/${owner}/${repo}/commit/${branch_sha}`;
let changelog = '';

try {
Expand All @@ -115,7 +128,7 @@ jobs:
if (commits.length === 0) {
changelog = `No changes detected.`;
} else {
// Include all commits since last nightly tag -> Dev
// Include all commits since last nightly tag -> target ref
const items = commits.map(c => {
const sha = (c.sha || '').substring(0, 7);
const msg = (c.commit?.message || '').split('\n')[0];
Expand All @@ -126,11 +139,12 @@ jobs:
}
} catch (e) {
// Likely first nightly (tag missing) or compare failed for another reason
changelog = 'First nightly or previous tag unavailable; showing recent commits at Dev.';
compare_url = `${context.serverUrl}/${owner}/${repo}/tree/Dev`;
changelog = `First nightly or previous tag unavailable; showing recent commits at ${target}.`;
compare_url = `${context.serverUrl}/${owner}/${repo}/tree/${target}`;
}

core.setOutput('short_sha', short);
core.setOutput('branch_sha', branch_sha);
core.setOutput('date', date);
core.setOutput('compare_url', compare_url);
core.setOutput('commit_url', commit_url);
Expand Down Expand Up @@ -176,6 +190,11 @@ jobs:
sudo apt-get install -y --no-install-recommends flatpak flatpak-builder
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user -y flathub org.gnome.Platform//48 org.gnome.Sdk//48
# Cargo/rustc must come from the Flatpak SDK environment (not the host toolchain).
# Try common branches to avoid coupling this workflow to the host runner image.
flatpak install --user -y flathub org.freedesktop.Sdk.Extension.rust-stable//24.08 \
|| flatpak install --user -y flathub org.freedesktop.Sdk.Extension.rust-stable//25.08 \
|| flatpak install --user -y flathub org.freedesktop.Sdk.Extension.rust-stable

- name: Verify Flatpak manifest exists
if: matrix.platform == 'ubuntu-22.04' && hashFiles('packaging/flatpak/io.github.jordonbc.OpenVCS.yml') != ''
Expand Down Expand Up @@ -231,14 +250,14 @@ jobs:
with:
projectPath: Backend
tagName: openvcs-nightly
releaseName: "OpenVCS Nightly ${{ steps.meta.outputs.date }} (dev@${{ steps.meta.outputs.short_sha }})"
releaseName: "OpenVCS Nightly ${{ steps.meta.outputs.date }} (${{ env.TARGET_REF }}@${{ steps.meta.outputs.short_sha }})"
releaseBody: |
Nightly build from Dev branch.
Nightly build from `${{ env.TARGET_REF }}`.
Date (UTC): ${{ steps.meta.outputs.date }}
Compare: ${{ steps.meta.outputs.compare_url }}
Since: ${{ needs.check-changes.outputs.since_sha }}
Ahead (relevant commits): ${{ needs.check-changes.outputs.ahead_count }}
Commit: ${{ github.sha }} (dev@${{ steps.meta.outputs.short_sha }})
Commit: ${{ steps.meta.outputs.branch_sha }} (${{ env.TARGET_REF }}@${{ steps.meta.outputs.short_sha }})
Runner: ${{ runner.os }} • Run #${{ github.run_number }}

Changes since last nightly:
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/publish-stable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,15 @@ jobs:
shell: bash
run: |
set -euxo pipefail
sudo apt-get update
sudo apt-get install -y --no-install-recommends flatpak flatpak-builder
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user -y flathub org.gnome.Platform//48 org.gnome.Sdk//48
# Cargo/rustc must come from the Flatpak SDK environment (not the host toolchain).
# Try common branches to avoid coupling this workflow to the host runner image.
flatpak install --user -y flathub org.freedesktop.Sdk.Extension.rust-stable//24.08 \
|| flatpak install --user -y flathub org.freedesktop.Sdk.Extension.rust-stable//25.08 \
|| flatpak install --user -y flathub org.freedesktop.Sdk.Extension.rust-stable

- name: Verify Flatpak manifest exists
if: matrix.platform == 'ubuntu-22.04' && hashFiles('packaging/flatpak/io.github.jordonbc.OpenVCS.yml') != ''
Expand Down
3 changes: 2 additions & 1 deletion packaging/flatpak/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ From the repo root:

```bash
flatpak install -y flathub org.gnome.Platform//48 org.gnome.Sdk//48
flatpak install -y flathub org.freedesktop.Sdk.Extension.rust-stable

cd Frontend && npm ci && npm run build && cd ..

Expand All @@ -21,5 +22,5 @@ flatpak run io.github.jordonbc.OpenVCS

- The manifest expects the frontend to already be built at `Frontend/dist`.
- It exports `OPENVCS_FLATPAK=1` so `Backend/build.rs` disables the in-app updater (Flatpak apps update via Flatpak).
- It bootstraps a minimal Rust toolchain via rustup if `cargo` is not available in the SDK.
- It uses `org.freedesktop.Sdk.Extension.rust-stable` for `cargo`/`rustc` inside the Flatpak build environment.
- For Flathub, you should pin sources (tag/commit) and vendor/pin dependencies so builds don’t require network access.
6 changes: 4 additions & 2 deletions packaging/flatpak/io.github.jordonbc.OpenVCS.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ app-id: io.github.jordonbc.OpenVCS
runtime: org.gnome.Platform
runtime-version: "48"
sdk: org.gnome.Sdk
sdk-extensions:
- org.freedesktop.Sdk.Extension.rust-stable

command: openvcs

Expand All @@ -19,6 +21,7 @@ modules:
- name: openvcs
buildsystem: simple
build-options:
append-path: /usr/lib/sdk/rust-stable/bin
env:
OPENVCS_FLATPAK: "1"
build-args:
Expand All @@ -32,8 +35,7 @@ modules:
- target
build-commands:
- test -f Frontend/dist/index.html
- command -v cargo >/dev/null || ((curl -sSf https://sh.rustup.rs || wget -qO- https://sh.rustup.rs) | sh -s -- -y --profile minimal)
- $HOME/.cargo/bin/cargo build --release --manifest-path Backend/Cargo.toml
- cargo build --release --manifest-path Backend/Cargo.toml
- install -Dm755 target/release/openvcs /app/bin/openvcs
- install -Dm644 packaging/flatpak/io.github.jordonbc.OpenVCS.desktop /app/share/applications/io.github.jordonbc.OpenVCS.desktop
- install -Dm644 packaging/flatpak/io.github.jordonbc.OpenVCS.metainfo.xml /app/share/metainfo/io.github.jordonbc.OpenVCS.metainfo.xml
Expand Down