Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add GPUI macOS release workflow and packager

Introduce a GitHub Actions workflow to build and upload a macOS DMG for
the GPUI app. Add gpui/package.sh to assemble the .app and DMG, include
the app SVG asset, and ignore dist/target in gpui/.gitignore

+280
+65
.github/workflows/release-gpui.yml
··· 1 + name: release gpui app 2 + 3 + on: 4 + release: 5 + types: [published] 6 + workflow_dispatch: 7 + inputs: 8 + tag: 9 + description: "Existing tag to attach the DMG to" 10 + type: string 11 + required: true 12 + 13 + jobs: 14 + build-dmg: 15 + runs-on: ${{ matrix.os }} 16 + permissions: 17 + contents: write 18 + 19 + strategy: 20 + matrix: 21 + include: 22 + - os: macos-latest 23 + arch: aarch64 24 + - os: macos-15-intel 25 + arch: x86_64 26 + 27 + steps: 28 + - uses: actions/checkout@v4 29 + 30 + - name: Resolve version 31 + id: vars 32 + run: | 33 + VERSION="${{ github.event.inputs.tag || github.event.release.tag_name || github.ref_name }}" 34 + echo "version=${VERSION}" >> "$GITHUB_OUTPUT" 35 + echo "dmg=Rockbox-${VERSION}-${{ matrix.arch }}.dmg" >> "$GITHUB_OUTPUT" 36 + 37 + - uses: actions-rust-lang/setup-rust-toolchain@v1 38 + 39 + - name: Cache Cargo 40 + uses: actions/cache@v4 41 + with: 42 + path: | 43 + ~/.cargo/registry 44 + ~/.cargo/git 45 + gpui/target 46 + key: ${{ runner.os }}-gpui-${{ hashFiles('gpui/Cargo.lock') }} 47 + restore-keys: ${{ runner.os }}-gpui- 48 + 49 + - name: Install protobuf 50 + run: brew install protobuf 51 + 52 + - name: Build and package 53 + run: bash package.sh 54 + working-directory: gpui 55 + 56 + - name: Rename DMG 57 + run: mv gpui/dist/Rockbox.dmg "${{ steps.vars.outputs.dmg }}" 58 + 59 + - name: Upload to release 60 + uses: softprops/action-gh-release@v1 61 + with: 62 + files: ${{ steps.vars.outputs.dmg }} 63 + tag_name: ${{ steps.vars.outputs.version }} 64 + env: 65 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+1
gpui/.gitignore
··· 1 1 target/ 2 + dist/
+115
gpui/assets/rockbox.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 + 4 + <svg 5 + xmlns:dc="http://purl.org/dc/elements/1.1/" 6 + xmlns:cc="http://creativecommons.org/ns#" 7 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 8 + xmlns:svg="http://www.w3.org/2000/svg" 9 + xmlns="http://www.w3.org/2000/svg" 10 + xmlns:xlink="http://www.w3.org/1999/xlink" 11 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 12 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 13 + version="1.1" 14 + width="120" 15 + height="120" 16 + viewBox="0 0 3386.6665 3386.6666" 17 + id="svg2" 18 + xml:space="preserve" 19 + style="fill-rule:evenodd" 20 + inkscape:version="0.48.1 r9760" 21 + sodipodi:docname="rockbox-clef.svg"><metadata 22 + id="metadata18"><rdf:RDF><cc:Work 23 + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type 24 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview 25 + pagecolor="#ffffff" 26 + bordercolor="#666666" 27 + borderopacity="1" 28 + objecttolerance="10" 29 + gridtolerance="10" 30 + guidetolerance="10" 31 + inkscape:pageopacity="0" 32 + inkscape:pageshadow="2" 33 + inkscape:window-width="864" 34 + inkscape:window-height="720" 35 + id="namedview16" 36 + showgrid="true" 37 + inkscape:zoom="4" 38 + inkscape:cx="82.5729" 39 + inkscape:cy="69.674808" 40 + inkscape:window-x="0" 41 + inkscape:window-y="24" 42 + inkscape:window-maximized="0" 43 + inkscape:current-layer="Ebene_x0020_1"><inkscape:grid 44 + type="xygrid" 45 + id="grid2993" 46 + empspacing="5" 47 + visible="true" 48 + enabled="true" 49 + snapvisiblegridlinesonly="true" /></sodipodi:namedview><defs 50 + id="defs38"><linearGradient 51 + id="linearGradient3657"><stop 52 + id="stop3659" 53 + style="stop-color:#aa8800;stop-opacity:1" 54 + offset="0" /><stop 55 + id="stop3661" 56 + style="stop-color:#aa8800;stop-opacity:0" 57 + offset="1" /></linearGradient><linearGradient 58 + x1="-89.260162" 59 + y1="-2.1270833" 60 + x2="-14.333748" 61 + y2="85.830009" 62 + id="linearGradient3663" 63 + xlink:href="#linearGradient3657" 64 + gradientUnits="userSpaceOnUse" /></defs> 65 + <g 66 + transform="matrix(0.90063697,0,0,0.88724946,748.25202,-1317.6084)" 67 + id="Ebene_x0020_1"> 68 + <defs 69 + id="defs5"> 70 + <linearGradient 71 + x1="17608" 72 + y1="4190.54" 73 + x2="17715.699" 74 + y2="4801.2798" 75 + id="id0" 76 + gradientUnits="userSpaceOnUse"> 77 + <stop 78 + id="stop8" 79 + style="stop-color:#a67d00;stop-opacity:1" 80 + offset="0" /> 81 + 82 + <stop 83 + id="stop12" 84 + style="stop-color:#ffffff;stop-opacity:1" 85 + offset="1" /> 86 + </linearGradient> 87 + </defs> 88 + 89 + 90 + 91 + 92 + 93 + <rect 94 + width="3133.5845" 95 + height="3180.8667" 96 + ry="302.44305" 97 + x="-517.4447" 98 + y="1803.135" 99 + id="rect3694" 100 + style="fill:#ffc001;fill-opacity:1;fill-rule:evenodd;stroke:none" /><path 101 + d="m 1133.6395,3200.4269 c 11.2559,18.2986 22.432,36.6011 33.5473,54.9487 60.3406,-16.5847 123.9814,-25.3702 188.4648,-26.059 126.1999,-1.316 246.2441,48.6846 317.2687,132.1614 64.2026,75.4539 101.1079,162.6951 106.6733,252.1193 2.3212,37.3762 -5.6502,74.466 -23.3869,108.7376 -43.5526,84.192 -117.9946,155.791 -214.1337,205.9842 45.7615,89.9291 90.0403,180.2716 132.8495,271.0265 81.8832,173.6387 132.6702,354.6655 150.8198,537.8489 4.676,47.2371 -2.5858,94.4734 -21.3927,138.9539 -19.2847,45.5742 -58.1673,84.1121 -110.1785,109.1541 -37.7378,18.1621 -83.751,23.2435 -127.4177,14.0995 -43.6802,-9.1436 -81.2498,-31.7365 -104.0476,-62.5664 -26.5203,-35.904 -42.2855,-75.8627 -46.0345,-116.7994 -2.1173,-23.0223 9.3653,-45.2202 31.1441,-60.2062 27.4567,-18.8993 62.7411,-29.5144 99.7917,-30.07 24.3266,-0.3368 47.3936,9.6188 60.3568,26.0881 12.9472,16.4494 13.7396,36.8489 2.1096,53.3337 -14.3314,20.3045 -37.0946,36.0653 -64.6429,44.7438 l 11.8035,16.1533 c 5.7557,9.2105 16.8132,15.7847 29.6363,17.5515 12.8112,1.7777 25.7362,-1.4481 34.5823,-8.6399 43.6788,-34.3792 67.7315,-81.3042 66.8875,-130.5556 -3.562,-84.7728 -16.3171,-169.3555 -38.1543,-252.8527 -55.7305,-177.8644 -127.5412,-352.777 -214.8999,-523.3512 -16.3737,5.1045 -33.0607,9.6178 -49.9908,13.5678 -49.5652,11.5132 -99.9157,21.0976 -150.8427,28.7217 l -100.813,-814.0936 z m 248.7771,672.5156 c -50.5142,19.7875 -104.412,34.1161 -160.2241,42.5737 l -50.7294,-409.6546 c 72.2514,121.1726 142.3288,243.0983 210.2123,365.7262 0.2567,0.458 0.4978,0.8959 0.7412,1.3547 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 m -150.076,-508.6879 c 17.5147,-4.8294 35.3415,-9.0782 53.3625,-12.729 56.5362,-11.4397 117.3362,-3.637 167.586,21.5055 45.7565,22.8959 80.8463,56.9138 99.7551,96.6234 42.1044,88.5079 47.194,184.4321 14.5179,273.6257 -6.8456,18.7164 -19.8851,35.5583 -37.8052,48.8537 -13.7547,10.2054 -28.1066,19.8974 -43.0038,29.0629 -80.5314,-153.6773 -165.3681,-306.0385 -254.4125,-456.9422 m -10.1481,551.2616 c -14.298,2.1559 -28.7086,3.9408 -43.196,5.3209 -157.9011,15.1267 -314.30239,-47.8917 -393.33817,-158.4708 -140.27886,-196.2782 -185.31029,-423.8857 -126.59762,-639.7364 20.62766,-75.767 42.25356,-151.3353 64.91887,-226.6963 6.26181,-20.8439 12.63094,-41.6829 19.09409,-62.5163 104.89649,154.512 206.20813,310.449 303.84503,467.7319 -104.88444,52.3821 -185.1784,129.7162 -229.58648,221.109 -7.33244,15.1065 -1.5786,32.4892 14.38626,43.3632 15.95163,10.8746 38.6339,12.8768 56.5858,5.0072 15.19318,-10.1136 29.0455,-21.3616 41.40015,-33.6098 49.89688,-51.7003 111.96607,-95.3657 183.00107,-128.7738 19.7486,32.4884 39.3155,65.0179 58.7576,97.6166 l -37.8236,-305.4347 c -92.6263,-150.6417 -189.46344,-299.7421 -290.47048,-447.1875 -16.73566,-24.4224 -33.73799,-48.7363 -51.00315,-72.9107 12.53936,-37.7911 25.36472,-75.5343 38.46801,-113.1874 18.72476,-53.759 31.27196,-108.8276 37.52831,-164.6129 7.04724,-63.0773 -7.52517,-127.0079 -42.2481,-185.2058 -79.1109,-132.6193 -213.39469,-241.1725 -380.18823,-307.3322 -73.37553,-29.1121 -155.31083,-41.0734 -235.85269,-34.4583 -67.48248,5.551 -116.971987,50.5243 -114.340324,103.8724 2.381016,48.4159 22.574124,95.696 58.086904,136.1456 32.88527,37.4341 67.82132,73.7652 104.71321,108.8721 113.82257,108.3303 214.95374,224.3585 302.12809,346.5898 17.13041,24.0557 34.19842,48.1462 51.17499,72.252 -15.99656,48.3246 -31.52841,96.7397 -46.59165,145.277 -69.85813,225.1541 -104.21032,456.9898 -102.24126,690.3515 0.92822,110.1406 26.98496,219.8501 76.97168,323.9736 68.55723,142.8242 245.98138,237.2059 438.57406,233.2775 86.18513,-1.7571 171.82603,-8.9862 256.10363,-21.6231 l -12.26,-99.0043" 102 + id="path24" 103 + style="fill:#000000;fill-opacity:1;fill-rule:evenodd" 104 + inkscape:connector-curvature="0" /> 105 + 106 + 107 + <path 108 + d="M 659.33533,2503.3767 C 573.5524,2394.5355 482.17708,2288.3563 385.43749,2185.1728 c -30.76545,-32.8099 -59.12968,-66.9092 -84.95666,-102.1687 -16.86386,-22.98 -28.28033,-48.07 -33.73308,-74.0078 -1.1599,-5.5966 0.71447,-11.2481 5.21013,-15.5497 4.45467,-4.3102 11.12647,-6.8716 18.3068,-7.0503 34.58075,-0.8971 69.10856,5.1026 100.42147,17.453 134.57561,53.071 237.34107,146.2148 284.58433,257.9109 13.77151,32.583 18.33147,66.9284 13.33714,100.5928 -7.04096,47.4029 -16.80734,94.4462 -29.27229,141.0237 l 0,0" 109 + id="path30" 110 + style="fill:#ffc000" 111 + inkscape:connector-curvature="0" /> 112 + 113 + 114 + </g> 115 + </svg>
+99
gpui/package.sh
··· 1 + #!/usr/bin/env bash 2 + # package.sh — build a release binary, create Rockbox.app, and wrap it in a DMG 3 + set -euo pipefail 4 + 5 + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 6 + cd "$SCRIPT_DIR" 7 + 8 + APP_NAME="Rockbox" 9 + BUNDLE_ID="org.rockbox.Rockbox" 10 + VERSION="0.1.0" 11 + BINARY="target/release/${APP_NAME}" 12 + APPICONSET="../macos/Rockbox/Assets.xcassets/AppIcon.appiconset" 13 + OUT_DIR="dist" 14 + APP_BUNDLE="${OUT_DIR}/${APP_NAME}.app" 15 + DMG_STAGING="${OUT_DIR}/dmg_staging" 16 + DMG_OUT="${OUT_DIR}/${APP_NAME}.dmg" 17 + 18 + # ── 1. Build ────────────────────────────────────────────────────────────────── 19 + echo "▸ Building release binary…" 20 + cargo build --release 21 + 22 + # ── 2. Build .icns from the Xcode project's appiconset PNGs ────────────────── 23 + echo "▸ Building app icon from Xcode appiconset…" 24 + ICONSET="${OUT_DIR}/AppIcon.iconset" 25 + rm -rf "$ICONSET" && mkdir -p "$ICONSET" 26 + 27 + # sips resizes a source PNG to each required iconset size. 28 + # The appiconset already has 16/32/64/128/256/512/1024 — map them directly. 29 + resize_png() { 30 + local src="${APPICONSET}/${1}.png" name="$2" size="$3" 31 + sips -z "$size" "$size" "$src" --out "${ICONSET}/${name}.png" &>/dev/null 32 + } 33 + 34 + resize_png 16 icon_16x16 16 35 + resize_png 32 icon_16x16@2x 32 36 + resize_png 32 icon_32x32 32 37 + resize_png 64 icon_32x32@2x 64 38 + resize_png 128 icon_128x128 128 39 + resize_png 256 icon_128x128@2x 256 40 + resize_png 256 icon_256x256 256 41 + resize_png 512 icon_256x256@2x 512 42 + resize_png 512 icon_512x512 512 43 + resize_png 1024 icon_512x512@2x 1024 44 + 45 + iconutil -c icns "$ICONSET" -o "${OUT_DIR}/AppIcon.icns" 46 + rm -rf "$ICONSET" 47 + 48 + # ── 3. Assemble .app bundle ─────────────────────────────────────────────────── 49 + echo "▸ Assembling ${APP_BUNDLE}…" 50 + rm -rf "$APP_BUNDLE" 51 + mkdir -p "${APP_BUNDLE}/Contents/MacOS" 52 + mkdir -p "${APP_BUNDLE}/Contents/Resources" 53 + 54 + cp "$BINARY" "${APP_BUNDLE}/Contents/MacOS/${APP_NAME}" 55 + cp "${OUT_DIR}/AppIcon.icns" "${APP_BUNDLE}/Contents/Resources/AppIcon.icns" 56 + 57 + cat > "${APP_BUNDLE}/Contents/Info.plist" <<PLIST 58 + <?xml version="1.0" encoding="UTF-8"?> 59 + <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 60 + "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 61 + <plist version="1.0"> 62 + <dict> 63 + <key>CFBundleExecutable</key> <string>${APP_NAME}</string> 64 + <key>CFBundleIdentifier</key> <string>${BUNDLE_ID}</string> 65 + <key>CFBundleName</key> <string>${APP_NAME}</string> 66 + <key>CFBundleDisplayName</key> <string>${APP_NAME}</string> 67 + <key>CFBundleIconFile</key> <string>AppIcon</string> 68 + <key>CFBundleVersion</key> <string>${VERSION}</string> 69 + <key>CFBundleShortVersionString</key> <string>${VERSION}</string> 70 + <key>CFBundlePackageType</key> <string>APPL</string> 71 + <key>NSHighResolutionCapable</key> <true/> 72 + <key>LSMinimumSystemVersion</key> <string>13.0</string> 73 + <key>NSSupportsAutomaticGraphicsSwitching</key> <true/> 74 + </dict> 75 + </plist> 76 + PLIST 77 + 78 + # ── 4. Ad-hoc code sign (allows Gatekeeper to run without a paid dev account) ─ 79 + echo "▸ Signing ad-hoc…" 80 + codesign --force --deep --sign - "$APP_BUNDLE" 81 + 82 + # ── 5. Build DMG ────────────────────────────────────────────────────────────── 83 + echo "▸ Creating DMG…" 84 + rm -rf "$DMG_STAGING" "$DMG_OUT" 85 + mkdir -p "$DMG_STAGING" 86 + cp -r "$APP_BUNDLE" "$DMG_STAGING/" 87 + ln -s /Applications "${DMG_STAGING}/Applications" 88 + 89 + hdiutil create \ 90 + -volname "${APP_NAME}" \ 91 + -srcfolder "$DMG_STAGING" \ 92 + -ov \ 93 + -format UDZO \ 94 + "$DMG_OUT" 95 + 96 + rm -rf "$DMG_STAGING" "${OUT_DIR}/AppIcon.icns" 97 + 98 + echo "" 99 + echo "✓ ${DMG_OUT}"