René's URL Explorer Experiment


Title: Migrate to NuGet.org Trusted Publishing (OIDC) · Issue #7 · ByteAether/QueryLink · GitHub

Open Graph Title: Migrate to NuGet.org Trusted Publishing (OIDC) · Issue #7 · ByteAether/QueryLink

X Title: Migrate to NuGet.org Trusted Publishing (OIDC) · Issue #7 · ByteAether/QueryLink

Description: Description We currently publish NuGet packages using a static NUGET_API_KEY. We need to migrate this process to use NuGet.org's trusted publishing feature (OIDC). This method enhances security by eliminating the need to store long-lived...

Open Graph Description: Description We currently publish NuGet packages using a static NUGET_API_KEY. We need to migrate this process to use NuGet.org's trusted publishing feature (OIDC). This method enhances security by ...

X Description: Description We currently publish NuGet packages using a static NUGET_API_KEY. We need to migrate this process to use NuGet.org's trusted publishing feature (OIDC). This method enhances security...

Opengraph URL: https://github.com/ByteAether/QueryLink/issues/7

X: @github

direct link

Domain: patch-diff.githubusercontent.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Migrate to NuGet.org Trusted Publishing (OIDC)","articleBody":"## Description\n\nWe currently publish NuGet packages using a static `NUGET_API_KEY`. We need to migrate this process to use **NuGet.org's trusted publishing** feature (OIDC). This method enhances security by eliminating the need to store long-lived API keys.\n\nThis migration is split into two parts: **Part 1** updates the workflow file and can be merged immediately. **Part 2** involves configuring NuGet.org and should be done right before the next release to avoid any token/trust expiration issues.\n\n**Official Documentation:**\n\n  * [NuGet.org Trusted Publishing](https://learn.microsoft.com/en-us/nuget/nuget-org/trusted-publishing)\n  * [Recommended GitHub Action approach](https://andrewlock.net/easily-publishing-nuget-packages-from-github-actions-with-trusted-publishing/)\n\n-----\n\n## Part 1: Prepare Workflow and Secrets (Can be done now)\n\nThis part updates the repository's workflow file to use OIDC and adds the necessary secret, preparing the file for the switch. It won't break the current `NUGET_API_KEY` publishing yet.\n\n### 1. Configure Repository Secret\n\n  * [x] Go to **Settings \\\u003e Secrets and variables \\\u003e Actions**.\n  * [x] Add a new repository secret named: `NUGET_USER`\n  * [x] The value of this secret should be the **username** (typically your email address or account name) of the NuGet.org account that owns the package(s).\n\n### 2. Update `publish-nuget.yml`\n\n  * [ ] In `.github/workflows/publish-nuget.yml`, find the `publish` job.\n\n  * [ ] **Add the `permissions` block** to the `publish` job (this is required for OIDC token issuance):\n\n    ```yaml\n    jobs:\n      publish:\n        runs-on: ubuntu-latest\n        permissions:             # Add this block\n          id-token: write\n\n        steps:\n          - name: Checkout code\n            # ... rest of the steps ...\n    ```\n\n  * [ ] **Add a new step** that uses the `NuGet/login@v1` action to exchange the OIDC token for a temporary API key. Place this step before the \"Publish to NuGet\" step:\n\n    ```yaml\n    # ... previous steps (e.g., build, pack) ...\n\n        - name: NuGet login (OIDC → temp API key)\n          uses: NuGet/login@v1\n          id: login\n          with:\n            # This secret is configured in step 1 of Part 1.\n            user: ${{ secrets.NUGET_USER }}\n\n        # The next step will now use the output of this 'login' step.\n    ```\n\n  * [ ] **Update the \"Publish to NuGet\" step** to **remove** the static `secrets.NUGET_API_KEY` and **use the temporary key** generated by the `NuGet/login` step:\n\n      * **Before:**\n\n        ```yaml\n        - name: Publish to NuGet\n          run: dotnet nuget push ./output/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json\n        ```\n\n      * **After:**\n\n        ```yaml\n        - name: Publish to NuGet\n          # IMPORTANT: Use the output of the 'login' step (steps.login.outputs.NUGET_API_KEY)\n          run: dotnet nuget push ./output/*.nupkg --api-key ${{ steps.login.outputs.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json\n        ```\n\n  * [ ] **Merge** these changes into the main branch. The workflow will still use the old static key if present, or it will now be prepared for the OIDC switch.\n\n-----\n\n## Part 2: Go-Live at Next Release (Do all at once)\n\nPerform these steps when you are ready to publish the next package version and fully switch to Trusted Publishing.\n\n### 1. Configure nuget.org Trusted Publisher\n\n  * [ ] Go to nuget.org and log in to the account that owns the package(s).\n  * [ ] Navigate to **Manage Account \\\u003e Trusted Publishers**.\n  * [ ] Add a new trusted publisher with the following details:\n      * **GitHub Owner:** `ByteAether`\n      * **GitHub Repository:** `Ulid`\n      * **GitHub workflow file:** `publish-nuget.yml`\n      * **GitHub environment:** Leave this field **blank** (unless you are using a protected environment).\n\n### 2. Trigger Publish \u0026 Verify\n\n  * [ ] Trigger the release workflow (e.g., by publishing a new release or using `workflow_dispatch`).\n  * [ ] Go to the \"Actions\" tab and confirm the workflow runs successfully.\n  * [ ] Check the workflow logs for the \"NuGet login\" and \"Publish to NuGet\" steps to ensure they completed without errors.\n  * [ ] Verify the new package version is visible on nuget.org.\n\n### 3\\. Cleanup (If organization doesn't use `NUGET_API_KEY` anywhere anymore)\n\n  * [ ] After verifying the new publishing method works, go to **Settings \\\u003e Secrets and variables \\\u003e Actions**.\n  * [ ] **Delete** the old `NUGET_API_KEY` repository secret. **Do not delete `NUGET_USER`**.","author":{"url":"https://github.com/Seramis","@type":"Person","name":"Seramis"},"datePublished":"2025-12-21T18:38:29.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/7/QueryLink/issues/7"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:cc465cf6-36b0-4a0c-005f-386c7e399070
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idA87A:1E8B3:508ED2A:6E1C3B5:698CCA76
html-safe-nonce7d82cdd3df746d9ca5d532d868f365d4f93018769a8eeb5303591ba1044d7c06
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBODdBOjFFOEIzOjUwOEVEMkE6NkUxQzNCNTo2OThDQ0E3NiIsInZpc2l0b3JfaWQiOiI3MTExMTk0MDQ0MDAwOTQ2ODA2IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmacbbbfa755d451003c4099417a3c81624421b37440c5917493764721bc6930930a
hovercard-subject-tagissue:3751462674
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/ByteAether/QueryLink/7/issue_layout
twitter:imagehttps://opengraph.githubassets.com/6841df56caabff1cf756c4a3215041b26d683b8adde2f72b517fa090b1cd79f8/ByteAether/QueryLink/issues/7
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/6841df56caabff1cf756c4a3215041b26d683b8adde2f72b517fa090b1cd79f8/ByteAether/QueryLink/issues/7
og:image:altDescription We currently publish NuGet packages using a static NUGET_API_KEY. We need to migrate this process to use NuGet.org's trusted publishing feature (OIDC). This method enhances security by ...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernameSeramis
hostnamegithub.com
expected-hostnamegithub.com
None640eeb7b6ff4d8d106235d228c0c286e82592d4d2403227b5b2b4fc5832297a4
turbo-cache-controlno-preview
go-importgithub.com/ByteAether/QueryLink git https://github.com/ByteAether/QueryLink.git
octolytics-dimension-user_id177204925
octolytics-dimension-user_loginByteAether
octolytics-dimension-repository_id836631262
octolytics-dimension-repository_nwoByteAether/QueryLink
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id836631262
octolytics-dimension-repository_network_root_nwoByteAether/QueryLink
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release3d444f0a47beeeac94cddbb51c91ab408befe8d4
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://patch-diff.githubusercontent.com/ByteAether/QueryLink/issues/7#start-of-content
https://patch-diff.githubusercontent.com/
Sign in https://patch-diff.githubusercontent.com/login?return_to=https%3A%2F%2Fgithub.com%2FByteAether%2FQueryLink%2Fissues%2F7
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://patch-diff.githubusercontent.com/login?return_to=https%3A%2F%2Fgithub.com%2FByteAether%2FQueryLink%2Fissues%2F7
Sign up https://patch-diff.githubusercontent.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=ByteAether%2FQueryLink
Reloadhttps://patch-diff.githubusercontent.com/ByteAether/QueryLink/issues/7
Reloadhttps://patch-diff.githubusercontent.com/ByteAether/QueryLink/issues/7
Reloadhttps://patch-diff.githubusercontent.com/ByteAether/QueryLink/issues/7
ByteAether https://patch-diff.githubusercontent.com/ByteAether
QueryLinkhttps://patch-diff.githubusercontent.com/ByteAether/QueryLink
Notifications https://patch-diff.githubusercontent.com/login?return_to=%2FByteAether%2FQueryLink
Fork 2 https://patch-diff.githubusercontent.com/login?return_to=%2FByteAether%2FQueryLink
Star 23 https://patch-diff.githubusercontent.com/login?return_to=%2FByteAether%2FQueryLink
Code https://patch-diff.githubusercontent.com/ByteAether/QueryLink
Issues 1 https://patch-diff.githubusercontent.com/ByteAether/QueryLink/issues
Pull requests 0 https://patch-diff.githubusercontent.com/ByteAether/QueryLink/pulls
Actions https://patch-diff.githubusercontent.com/ByteAether/QueryLink/actions
Security 0 https://patch-diff.githubusercontent.com/ByteAether/QueryLink/security
Insights https://patch-diff.githubusercontent.com/ByteAether/QueryLink/pulse
Code https://patch-diff.githubusercontent.com/ByteAether/QueryLink
Issues https://patch-diff.githubusercontent.com/ByteAether/QueryLink/issues
Pull requests https://patch-diff.githubusercontent.com/ByteAether/QueryLink/pulls
Actions https://patch-diff.githubusercontent.com/ByteAether/QueryLink/actions
Security https://patch-diff.githubusercontent.com/ByteAether/QueryLink/security
Insights https://patch-diff.githubusercontent.com/ByteAether/QueryLink/pulse
New issuehttps://patch-diff.githubusercontent.com/login?return_to=https://github.com/ByteAether/QueryLink/issues/7
New issuehttps://patch-diff.githubusercontent.com/login?return_to=https://github.com/ByteAether/QueryLink/issues/7
Taskhttps://patch-diff.githubusercontent.com/ByteAether/QueryLink/issues?q=type:"Task"
Migrate to NuGet.org Trusted Publishing (OIDC)https://patch-diff.githubusercontent.com/ByteAether/QueryLink/issues/7#top
https://patch-diff.githubusercontent.com/Seramis
https://github.com/Seramis
https://github.com/Seramis
Seramishttps://github.com/Seramis
on Dec 21, 2025https://github.com/ByteAether/QueryLink/issues/7#issue-3751462674
NuGet.org Trusted Publishinghttps://learn.microsoft.com/en-us/nuget/nuget-org/trusted-publishing
Recommended GitHub Action approachhttps://andrewlock.net/easily-publishing-nuget-packages-from-github-actions-with-trusted-publishing/
Seramishttps://patch-diff.githubusercontent.com/Seramis
Taskhttps://patch-diff.githubusercontent.com/ByteAether/QueryLink/issues?q=type:"Task"
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.