Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
54aca4e
feat: Task 1 - Project Scaffolding & Setup
lfmundim Jun 10, 2026
f7c62a0
feat: Task 2 - Data Models & Persistence
lfmundim Jun 10, 2026
06c0638
feat: Finish CRUD operations for Task 2
lfmundim Jun 10, 2026
94cdad5
feat: Task 3 - Core Services
lfmundim Jun 10, 2026
08a97ff
feat: Task 4 - App Indicator
lfmundim Jun 10, 2026
ae38f5c
feat: Task 5 - Main Window UI
lfmundim Jun 10, 2026
37700a9
feat: Task 6 - Packaging & Distribution
lfmundim Jun 10, 2026
021a1ca
fix: correct appindicator crate name
lfmundim Jun 10, 2026
55bef51
ci: add dedicated ubuntu build workflow
lfmundim Jun 10, 2026
229e4cc
fix: use ayatana appindicator system dependencies
lfmundim Jun 10, 2026
358575b
fix: correct libadwaita alias and gtk prelude
lfmundim Jun 10, 2026
f20e961
fix: resolve gtk4 traits and libadwaita features
lfmundim Jun 10, 2026
1c81045
fix: wrap OverlaySplitView children in Option
lfmundim Jun 10, 2026
c252744
fix: use Indicator::new instead of builder
lfmundim Jun 10, 2026
40ed733
fix: import AppIndicatorExt for set_status
lfmundim Jun 10, 2026
cb29bbe
ci: build for both amd64 and arm64 architectures
lfmundim Jun 10, 2026
892f257
feat: wire up main window and indicator app
lfmundim Jun 10, 2026
86d769e
ci: test ubuntu-26.04 runners
lfmundim Jun 10, 2026
f681ce5
fix: provide TokenCache to ArmService and remove unused mut
lfmundim Jun 10, 2026
5080d81
fix: use pure DBus tray (ksni) to avoid GTK3/GTK4 conflicts
lfmundim Jun 10, 2026
016338c
ci: add libdbus-1-dev to dependencies
lfmundim Jun 10, 2026
0b261d8
fix: make Db thread-safe to satisfy ksni Tray bounds
lfmundim Jun 10, 2026
20233ff
feat: fully functional azure cli bridge, onboarding, and dynamic arm …
lfmundim Jun 10, 2026
96a1cad
fix: correct glib namespace path to gtk::glib to fix compilation error
lfmundim Jun 10, 2026
16d0ad2
fix: use glib::MainContext::channel for thread-safe cross-thread GTK …
lfmundim Jun 10, 2026
7409b60
fix: complete bug sweep for onboarding, pinning, dynamic tray updates…
lfmundim Jun 10, 2026
00982a8
fix: thread safety for GTK Stack in onboarding refresh
lfmundim Jun 10, 2026
cb40c85
feat: restructure UI to support Browse Azure mode and pinned RG sidebar
lfmundim Jun 10, 2026
c2c92c4
feat: implement Settings logic, Pinned tab loading, and Tray actions
lfmundim Jun 10, 2026
4456202
fix: compile errors from older gtk4 and variable scope
lfmundim Jun 10, 2026
2bedb3a
fix: actually remove UriLauncher
lfmundim Jun 10, 2026
fff05d2
fix: populate resources on startup and hide view switcher tabs on bro…
lfmundim Jun 10, 2026
95b87b6
fix: rename header_bar to detail_header
lfmundim Jun 10, 2026
46d00be
feat: redesign UI to match macOS layout and expander rows
lfmundim Jun 10, 2026
c25e7d6
fix: explicit dropdown index change and settings tray fix
lfmundim Jun 10, 2026
ece486e
fix: add loading indicator and error logs to resource fetch
lfmundim Jun 10, 2026
5422dee
fix: explicit resource group load function and unpin sidebar sync
lfmundim Jun 10, 2026
81e20c7
fix: add missing get_icon_for_type function
lfmundim Jun 10, 2026
39f8014
fix: race condition in GTK property update for dropdown selection
lfmundim Jun 11, 2026
13394b6
fix: isolation of pinned resources and rendering of empty dropdown error
lfmundim Jun 11, 2026
aaf5e40
fix: remove cached_rg_resources from main.rs
lfmundim Jun 11, 2026
8ffd549
fix: tray action thread crash and hide chevron for non-runnable orphans
lfmundim Jun 11, 2026
498da0e
fix: conditionally show start/stop buttons based on background state …
lfmundim Jun 11, 2026
3aa25c8
fix: correctly handle start/stop api logic per resource type and fix …
lfmundim Jun 11, 2026
00be0f9
fix: explicit parallel ci jobs and tray dynamic refresh
lfmundim Jun 11, 2026
eebeae5
fix: match mac arm.rs api versions and logic app support
lfmundim Jun 11, 2026
66a6800
fix: ensure Content-Length is 0 for POST requests with no body to pre…
lfmundim Jun 11, 2026
fb7849a
fix: make indicator ui state explicitly match mac logic and show disa…
lfmundim Jun 11, 2026
0270009
fix: dynamically fetch and display all resources within pinned resour…
lfmundim Jun 11, 2026
8746e3a
fix: compilation error due to PinnedResource struct initialization mi…
lfmundim Jun 11, 2026
4be2838
fix: resolve missing and duplicate imports causing Rust compilation e…
lfmundim Jun 11, 2026
fd4e3e2
fix: remove invalid PinnedGroup import
lfmundim Jun 11, 2026
c400d55
fix: correctly parse local time for token expiration to prevent using…
lfmundim Jun 11, 2026
42297f8
fix: rely on unix timestamp from az cli for robust token expiration
lfmundim Jun 11, 2026
8eacc06
chore: add detailed response body to ARM API errors and enforce resou…
lfmundim Jun 11, 2026
1281434
chore: ignore ubuntu build artifacts
lfmundim Jun 11, 2026
779e25d
chore: remove accidental duplicate files and tasks folders
lfmundim Jun 11, 2026
70065f4
chore: update ubuntu branding to com.kimdim and configure tests
lfmundim Jun 11, 2026
ad8e7ca
chore: temporarily restore deb generation for ubuntu-ci
lfmundim Jun 11, 2026
81323b5
chore: revert tray icon to system default for GNOME compatibility
lfmundim Jun 11, 2026
9abd942
docs: rename Ubuntu to GNOME Linux in README.md
lfmundim Jun 11, 2026
dc2de87
docs: clarify GNOME compatibility in README.md
lfmundim Jun 11, 2026
2c75410
feat: integrate Canonical Snap Store deployments
lfmundim Jun 12, 2026
93be920
fix(snap): add libssl-dev to build-packages to resolve openssl-sys bu…
lfmundim Jun 12, 2026
555e177
ci(snap): pass 'pack' to snapcraft-args to fix deprecation warning
lfmundim Jun 12, 2026
38ec7e8
ci(snap): dynamically inject version into snapcraft.yaml to fix git i…
lfmundim Jun 12, 2026
1d6fed7
Update readme with Snap badge
lfmundim Jun 12, 2026
7d5f066
fix(ubuntu): architectural parity with macOS reference implementation
lfmundim Jun 12, 2026
e473732
fix(ubuntu): add missing subscription_display_name field in PinnedRes…
lfmundim Jun 12, 2026
e5ea6ee
fix(ubuntu): capture tokio handle before thread spawn; disable snap C…
lfmundim Jun 12, 2026
2a961da
fix(ubuntu): clone tokio handle before each thread closure
lfmundim Jun 12, 2026
cd0685e
feat(ubuntu): pin UX polish — glyph placement, group pin hides child …
lfmundim Jun 12, 2026
8cd462c
feat(ubuntu): tray account row shows signed-in user with auth glyph
lfmundim Jun 12, 2026
441bae7
feat(ubuntu): suggest snap refresh command in update checker
lfmundim Jun 12, 2026
31abf18
docs: add AZURE.md — exhaustive audit of all Azure interactions
lfmundim Jun 12, 2026
18f3d5e
ci(ubuntu): re-enable snap build and publish steps
lfmundim Jun 12, 2026
a2987b9
add folder to gitignore
lfmundim Jun 13, 2026
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
127 changes: 126 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ on:
- '.github/workflows/release.yml'
workflow_dispatch:
inputs:
build_ubuntu:
description: 'Build Ubuntu'
type: boolean
default: true
build_macos:
description: 'Build macOS'
type: boolean
Expand All @@ -23,6 +27,7 @@ jobs:
detect:
runs-on: ubuntu-latest
outputs:
ubuntu: ${{ steps.changes.outputs.ubuntu }}
macos: ${{ steps.changes.outputs.macos }}
windows: ${{ steps.changes.outputs.windows }}
steps:
Expand All @@ -41,10 +46,16 @@ jobs:
id: changes
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "ubuntu=${{ inputs.build_ubuntu }}" >> $GITHUB_OUTPUT
echo "macos=${{ inputs.build_macos }}" >> $GITHUB_OUTPUT
echo "windows=${{ inputs.build_windows }}" >> $GITHUB_OUTPUT
else
CHANGED=$(git diff --name-only HEAD^ HEAD)
if echo "$CHANGED" | grep -qE '^src/ubuntu/|^\.github/workflows/release\.yml'; then
echo "ubuntu=true" >> $GITHUB_OUTPUT
else
echo "ubuntu=false" >> $GITHUB_OUTPUT
fi
if echo "$CHANGED" | grep -qE '^src/macos/|^\.github/workflows/release\.yml'; then
echo "macos=true" >> $GITHUB_OUTPUT
else
Expand All @@ -59,7 +70,7 @@ jobs:

create-release:
needs: detect
if: needs.detect.outputs.macos == 'true' || needs.detect.outputs.windows == 'true'
if: needs.detect.outputs.ubuntu == 'true' || needs.detect.outputs.macos == 'true' || needs.detect.outputs.windows == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
Expand Down Expand Up @@ -376,3 +387,117 @@ jobs:
--urls $msiUrl `
--token $env:WINGET_TOKEN `
--submit

build-ubuntu-amd64:
needs: [detect, create-release]
if: needs.detect.outputs.ubuntu == 'true'
runs-on: ubuntu-24.04
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y libgtk-4-dev libadwaita-1-dev libayatana-appindicator3-dev

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Install cargo-deb
run: cargo install cargo-deb

- name: Inject Version
working-directory: src/ubuntu/AzPin
run: |
sed -i "s/^version = .*/version = \"${{ needs.create-release.outputs.version }}\"/" Cargo.toml

- name: Build and Package
working-directory: src/ubuntu/AzPin
run: cargo deb

- name: Rename and Upload DEB
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
DEB_FILE=$(ls src/ubuntu/AzPin/target/debian/*.deb | head -n 1)
NEW_NAME="AzPin-Ubuntu-x64-v${{ needs.create-release.outputs.version }}.deb"
mv "$DEB_FILE" "$NEW_NAME"
gh release upload "${{ needs.create-release.outputs.tag }}" "$NEW_NAME" --clobber

- name: Inject Snap Version
working-directory: src/ubuntu/AzPin
run: |
sed -i "s/^version: 'git'/version: '${{ needs.create-release.outputs.version }}'/" snap/snapcraft.yaml

- name: Build Snap
id: build-snap
uses: snapcore/action-build@v1
with:
path: src/ubuntu/AzPin
snapcraft-args: pack

- name: Publish Snap
uses: snapcore/action-publish@v1
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
with:
snap: ${{ steps.build-snap.outputs.snap }}
release: stable

build-ubuntu-arm64:
needs: [detect, create-release]
if: needs.detect.outputs.ubuntu == 'true'
runs-on: ubuntu-24.04-arm
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y libgtk-4-dev libadwaita-1-dev libayatana-appindicator3-dev

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Install cargo-deb
run: cargo install cargo-deb

- name: Inject Version
working-directory: src/ubuntu/AzPin
run: |
sed -i "s/^version = .*/version = \"${{ needs.create-release.outputs.version }}\"/" Cargo.toml

- name: Build and Package
working-directory: src/ubuntu/AzPin
run: cargo deb

- name: Rename and Upload DEB
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
DEB_FILE=$(ls src/ubuntu/AzPin/target/debian/*.deb | head -n 1)
NEW_NAME="AzPin-Ubuntu-arm64-v${{ needs.create-release.outputs.version }}.deb"
mv "$DEB_FILE" "$NEW_NAME"
gh release upload "${{ needs.create-release.outputs.tag }}" "$NEW_NAME" --clobber

- name: Inject Snap Version
working-directory: src/ubuntu/AzPin
run: |
sed -i "s/^version: 'git'/version: '${{ needs.create-release.outputs.version }}'/" snap/snapcraft.yaml

- name: Build Snap
id: build-snap
uses: snapcore/action-build@v1
with:
path: src/ubuntu/AzPin
snapcraft-args: pack

- name: Publish Snap
uses: snapcore/action-publish@v1
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
with:
snap: ${{ steps.build-snap.outputs.snap }}
release: stable
124 changes: 124 additions & 0 deletions .github/workflows/ubuntu-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
name: Ubuntu CI

on:
workflow_dispatch:
push:
branches: [ main ]

jobs:
build-amd64:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y libgtk-4-dev libadwaita-1-dev libdbus-1-dev pkg-config

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Run Cargo Test
working-directory: src/ubuntu/AzPin
run: cargo test

- name: Install cargo-deb
run: cargo install cargo-deb

- name: Build and Package
working-directory: src/ubuntu/AzPin
run: cargo deb

- name: Rename DEB
working-directory: src/ubuntu/AzPin
run: |
DEB_FILE=$(ls target/debian/*.deb | head -n 1)
VERSION=$(grep '^version =' Cargo.toml | awk -F'"' '{print $2}')
NEW_NAME="target/debian/AzPin-Ubuntu-x64-v${VERSION}.deb"
mv "$DEB_FILE" "$NEW_NAME"

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: azpin-ubuntu-amd64-deb
path: src/ubuntu/AzPin/target/debian/AzPin-Ubuntu-x64-v*.deb

- name: Inject Snap Version
working-directory: src/ubuntu/AzPin
run: |
VERSION=$(grep '^version =' Cargo.toml | awk -F'"' '{print $2}')
sed -i "s/^version: 'git'/version: '${VERSION}'/" snap/snapcraft.yaml

- name: Build Snap
id: build-snap
uses: snapcore/action-build@v1
with:
path: src/ubuntu/AzPin
snapcraft-args: pack

- name: Publish Snap
uses: snapcore/action-publish@v1
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
with:
snap: ${{ steps.build-snap.outputs.snap }}
release: ${{ github.event_name == 'push' && 'candidate' || 'edge' }}


build-arm64:
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y libgtk-4-dev libadwaita-1-dev libdbus-1-dev pkg-config

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Run Cargo Test
working-directory: src/ubuntu/AzPin
run: cargo test

- name: Install cargo-deb
run: cargo install cargo-deb

- name: Build and Package
working-directory: src/ubuntu/AzPin
run: cargo deb

- name: Rename DEB
working-directory: src/ubuntu/AzPin
run: |
DEB_FILE=$(ls target/debian/*.deb | head -n 1)
VERSION=$(grep '^version =' Cargo.toml | awk -F'"' '{print $2}')
NEW_NAME="target/debian/AzPin-Ubuntu-arm64-v${VERSION}.deb"
mv "$DEB_FILE" "$NEW_NAME"

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: azpin-ubuntu-arm64-deb
path: src/ubuntu/AzPin/target/debian/AzPin-Ubuntu-arm64-v*.deb

- name: Inject Snap Version
working-directory: src/ubuntu/AzPin
run: |
VERSION=$(grep '^version =' Cargo.toml | awk -F'"' '{print $2}')
sed -i "s/^version: 'git'/version: '${VERSION}'/" snap/snapcraft.yaml

- name: Build Snap
id: build-snap
uses: snapcore/action-build@v1
with:
path: src/ubuntu/AzPin
snapcraft-args: pack

- name: Publish Snap
uses: snapcore/action-publish@v1
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
with:
snap: ${{ steps.build-snap.outputs.snap }}
release: ${{ github.event_name == 'push' && 'candidate' || 'edge' }}
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,10 @@ src/windows/tasks/
**/bin/
**/obj/
.vs/

# Rust / Ubuntu
src/ubuntu/AzPin/target/
**/*.rs.bk
*.deb
snapcraft.login
feature-plans/
Loading
Loading