Skip to content

Investigating build failure and framework issue - #222

Merged
winnerspiros merged 2 commits into
masterfrom
copilot/fix-build-failure
Apr 20, 2026
Merged

Investigating build failure and framework issue#222
winnerspiros merged 2 commits into
masterfrom
copilot/fix-build-failure

Conversation

Copilot AI commented Apr 20, 2026

Copy link
Copy Markdown
  • Replace osu-framework submodule with winnerspiros NuGet packages (v2026.420.3)
    • osu.Game/osu.Game.csproj, osu.Android.props, osu.iOS.props: PackageReference to ppy.osu.Framework* v2026.420.3
    • NuGet.Config: point to winnerspiros GitHub Packages feed
    • Remove Veldrid.SPIRV fork override from Directory.Build.props
    • Remove submodule projects from solution filters and osu.sln
    • Remove git submodule, local-packages/, SuppressSubmoduleWarnings.targets
  • Add GitHub Packages authentication to all workflows (ci, release, deploy)
    • Add packages: read permission
    • Add dotnet nuget update source winnerspiros-github --password $GITHUB_TOKEN step to every build job
    • Remove submodules: recursive from all workflow checkouts
  • Validation: 0 CodeQL alerts, code review passed

…2026.420.3)

Replace ProjectReference to submodule with PackageReference to
ppy.osu.Framework/Android/iOS v2026.420.3 from GitHub Packages.

- Add winnerspiros GitHub Packages NuGet source to NuGet.Config
- Add GitHub Packages authentication to all CI/release/deploy workflows
- Remove git submodule, .gitmodules, local-packages/
- Remove submodule projects from osu.sln and all .slnf filters
- Remove SuppressSubmoduleWarnings.targets and Veldrid.SPIRV override
- Clean up submodule-specific items in Android/iOS props
- Add packages:read permission to workflows

Agent-Logs-Url: https://github.com/winnerspiros/osu/sessions/bcb0923f-4d2a-490f-926c-cc48ab950edd

Co-authored-by: winnerspiros <1675249+winnerspiros@users.noreply.github.com>
@winnerspiros
winnerspiros marked this pull request as ready for review April 20, 2026 18:36
Copilot AI review requested due to automatic review settings April 20, 2026 18:36
@winnerspiros
winnerspiros merged commit 80a09f1 into master Apr 20, 2026
4 of 19 checks passed
Copilot stopped work on behalf of winnerspiros due to an error April 20, 2026 18:36
Copilot AI requested a review from winnerspiros April 20, 2026 18:36
@gitar-bot

gitar-bot Bot commented Apr 20, 2026

Copy link
Copy Markdown

Important

You are using the Gitar free plan. Upgrade to unlock code review, CI analysis, auto-apply, custom automations, and more.

Gitar

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the repo from an osu-framework git submodule setup to consuming a forked framework via NuGet (GitHub Packages), and updates CI/release/deploy pipelines accordingly to restore from that feed.

Changes:

  • Replaced osu-framework submodule project references with PackageReference to ppy.osu.Framework* v2026.420.3.
  • Updated NuGet configuration to use the winnerspiros GitHub Packages feed; removed local package overrides and submodule-related build plumbing.
  • Updated GitHub Actions workflows to remove submodule checkout and add GitHub Packages authentication + permissions.

Reviewed changes

Copilot reviewed 16 out of 17 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
osu.sln Removes submodule projects/solution folders and related configuration entries.
osu.Desktop.slnf Removes submodule projects from the desktop solution filter.
osu.Android.slnf Removes submodule projects from the Android solution filter.
osu.iOS.slnf Removes submodule projects from the iOS solution filter.
osu.Game/osu.Game.csproj Switches from ProjectReference to ppy.osu.Framework NuGet dependency.
osu.Android.props Switches to ppy.osu.Framework.Android NuGet dependency and drops submodule-native-lib wiring.
osu.iOS.props Switches to ppy.osu.Framework.iOS NuGet dependency and removes manual props import for submodule builds.
NuGet.Config Replaces local-packages source with winnerspiros GitHub Packages feed.
Directory.Build.props Removes Veldrid.SPIRV override and associated NU1605 suppression.
.gitmodules Removes osu-framework submodule definition.
local-packages/.gitignore Removes local package override ignore rules.
build/SuppressSubmoduleWarnings.targets Removes submodule-specific warning suppression target.
.github/workflows/ci.yml Removes submodule checkout and adds GitHub Packages auth + packages: read.
.github/workflows/release.yml Removes submodule checkout, adds GitHub Packages auth, and adjusts Android native-lib verification messaging.
.github/workflows/deploy.yml Adds GitHub Packages auth + packages: read to support restore during packing.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread osu.Android.props
Comment on lines 65 to 69
(the reference crosses assembly boundaries via a ProjectReference chain), causing
TypeLoadException: 'Could not resolve type Veldrid.SPIRV.CrossCompileTarget' at
startup when the renderer tries to compile shaders. -->
<TrimmerRootAssembly Include="ppy.Veldrid.SPIRV" RootMode="all" />
</ItemGroup>

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment mentions the trimming issue occurring via a “ProjectReference chain”, but the framework is now consumed via PackageReference below. Updating the wording to reflect the current dependency layout (or removing the ProjectReference-specific detail) will keep this explanation accurate for future maintainers.

Copilot uses AI. Check for mistakes.
Comment thread NuGet.Config
Comment on lines +5 to +6
<!-- winnerspiros/osu-framework fork NuGet packages (published to GitHub Packages) -->
<add key="winnerspiros-github" value="https://nuget.pkg.github.com/winnerspiros/index.json" />

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that the framework submodule is removed and replaced with a GitHub Packages feed, README.md still contains submodule-based setup instructions (e.g., cloning with --recurse-submodules / “Framework as submodule”). Please update the docs to match the new NuGet-based setup to avoid confusing contributors.

Copilot uses AI. Check for mistakes.
Comment thread NuGet.Config
<!-- winnerspiros/veldrid-spirv fork NuGet package (included in local-packages/).
Source: https://github.com/winnerspiros/veldrid-spirv/releases -->
<add key="local-packages" value="local-packages" />
<!-- winnerspiros/osu-framework fork NuGet packages (published to GitHub Packages) -->

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NuGet.Config adds the winnerspiros GitHub Packages feed but doesn’t document how contributors should authenticate locally (restore will fail without credentials for this source). Consider adding a short note here (or in README/CONTRIBUTING) with the recommended dotnet nuget add/update source command and required token scopes so local builds are reproducible.

Suggested change
<!-- winnerspiros/osu-framework fork NuGet packages (published to GitHub Packages) -->
<!--
winnerspiros/osu-framework fork NuGet packages (published to GitHub Packages).
Local restore requires authenticating this source first, for example:
dotnet nuget update source winnerspiros-github --username YOUR_GITHUB_USERNAME --password YOUR_GITHUB_TOKEN --store-password-in-clear-text
If the source has not been added yet, use:
dotnet nuget add source https://nuget.pkg.github.com/winnerspiros/index.json --name winnerspiros-github --username YOUR_GITHUB_USERNAME --password YOUR_GITHUB_TOKEN --store-password-in-clear-text
The GitHub token should include at least the `read:packages` scope; add `repo` as well if the package/repository is private.
-->

Copilot uses AI. Check for mistakes.
Comment thread .github/workflows/ci.yml
Comment on lines +34 to +36
- name: Authenticate to GitHub Packages
run: dotnet nuget update source winnerspiros-github --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The workflow authenticates to GitHub Packages using dotnet nuget update source ... --store-password-in-clear-text, which writes the token into a NuGet.Config file in plain text. To reduce the risk of accidental token exposure (e.g., if the workspace/config is ever uploaded), consider writing credentials to a temporary config under $RUNNER_TEMP and passing --configfile to restore/build, then deleting it after.

Copilot uses AI. Check for mistakes.
run: dotnet workload install android

- name: Authenticate to GitHub Packages
run: dotnet nuget update source winnerspiros-github --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This step stores the GitHub Packages token in clear text via dotnet nuget update source ... --store-password-in-clear-text. Consider instead generating a temporary NuGet.Config (or updating a temp config via --configfile) for the duration of the job and deleting it afterwards to minimize the chance of credentials being persisted or leaked via artifacts/logging.

Suggested change
run: dotnet nuget update source winnerspiros-github --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text
run: |
NUGET_CONFIG_FILE="$RUNNER_TEMP/NuGet.Config"
cat > "$NUGET_CONFIG_FILE" <<'EOF'
<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>
EOF
dotnet nuget add source "https://nuget.pkg.github.com/winnerspiros/index.json" \
--name winnerspiros-github \
--username "${{ github.actor }}" \
--password "${{ secrets.GITHUB_TOKEN }}" \
--store-password-in-clear-text \
--configfile "$NUGET_CONFIG_FILE"
echo "NUGET_CONFIG_FILE=$NUGET_CONFIG_FILE" >> "$GITHUB_ENV"

Copilot uses AI. Check for mistakes.
Comment on lines +61 to +63
- name: Authenticate to GitHub Packages
run: dotnet nuget update source winnerspiros-github --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This job authenticates to GitHub Packages by writing the token into NuGet.Config in clear text (--store-password-in-clear-text). Consider using a temporary config file (via --configfile) scoped to the job and removing it after restore/pack to avoid any possibility of credentials being captured in uploaded artifacts or reused unexpectedly.

Copilot uses AI. Check for mistakes.
Comment on lines 258 to 262
- name: Verify native libraries in APK
run: |
APK="${{ steps.find_apk.outputs.apk_path }}"
SUBMOD="submodules/osu-framework/osu.Framework.Android/arm64-v8a"
echo "Checking APK for required native libraries..."

Copilot AI Apr 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The native library verification here only checks that the required .so files are present. Previously there was also an ABI/compatibility validation to ensure libbass.so was the Android build (not a desktop/Linux variant), which helps catch hard-to-debug startup crashes. Consider reintroducing an equivalent compatibility check (e.g., extracting and inspecting libbass.so with readelf).

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants