This guide covers setting up the GitHub Actions packaging pipeline for IntuneGet.
IntuneGet uses GitHub Actions to:
- Download applications from Winget
- Package them as
.intunewinfiles usingIntuneWinAppUtil.exe - Upload the packaged app to Microsoft Intune
- Report status back to the web application
The workflow runs on a Windows runner because IntuneWinAppUtil.exe is a Windows-only tool.
Best for most self-hosters. Uses GitHub's hosted runners.
- Fork the IntuneGet repository
- Configure secrets in your fork
- Point your deployment to your fork
For enterprises wanting to use their own infrastructure.
- Set up a Windows machine as a self-hosted runner
- Register it with your repository
- Modify workflow to use
runs-on: self-hosted
- Go to github.com/ugurkocde/IntuneGet
- Click Fork in the top right
- Select your account/organization
- Wait for the fork to complete
Navigate to your private workflows repository (GITHUB_WORKFLOWS_REPO):
Settings > Secrets and variables > Actions > New repository secret
Add these secrets:
| Secret Name | Description | How to Get |
|---|---|---|
AZURE_CLIENT_ID |
Azure AD Application ID | From Azure AD app registration |
AZURE_CLIENT_SECRET |
Azure AD Client Secret | From Azure AD app registration |
CALLBACK_SECRET |
Webhook verification secret | Generate with openssl rand -hex 16 |
GitHub disables workflows in forks by default:
- Go to the Actions tab in your private workflows repository
- Click I understand my workflows, go ahead and enable them
In your IntuneGet deployment, update these environment variables:
GITHUB_OWNER=your-github-username
GITHUB_WORKFLOWS_REPO=IntuneGet-Workflows
GITHUB_REPO=IntuneGet
GITHUB_PAT=ghp_your-personal-access-token
CALLBACK_SECRET=same-secret-as-in-githubThe PAT allows IntuneGet to trigger workflows in your repository.
- Go to github.com/settings/tokens
- Click Generate new token (classic)
- Set a descriptive name:
IntuneGet Pipeline - Select scopes:
repo(Full control of private repositories)workflow(Update GitHub Action workflows)
- Click Generate token
- Copy the token immediately
For fine-grained tokens:
- Repository access: Select your fork
- Permissions:
- Actions: Read and write
- Contents: Read
Reference workflow template is located at .github/workflows-reference/package-intunewin.yml.
In production, the real packaging workflow should run in your private GITHUB_WORKFLOWS_REPO.
Copy that template into your private repo at .github/workflows/package-intunewin.yml.
When triggered, the workflow receives:
| Input | Description |
|---|---|
app_id |
Winget package identifier |
deployment_id |
Unique deployment tracking ID |
tenant_id |
Target Microsoft 365 tenant |
callback_url |
URL to report status back |
| Secret | Purpose |
|---|---|
AZURE_CLIENT_ID |
Authenticate to Intune |
AZURE_CLIENT_SECRET |
Authenticate to Intune |
CALLBACK_SECRET |
Sign webhook callbacks |
If you prefer to use your own infrastructure:
- Windows 10/11 or Windows Server 2019+
- PowerShell 5.1+
- At least 4GB RAM
- 20GB+ free disk space
- Internet access
- In your repository, go to Settings > Actions > Runners
- Click New self-hosted runner
- Select Windows and follow the instructions
Update the packaging workflow in your private workflows repository:
jobs:
package:
runs-on: self-hosted # Changed from windows-latestTo test the pipeline manually:
- Go to Actions in your fork
- Select the Package Intunewin workflow
- Click Run workflow
- Fill in test values:
app_id:Microsoft.VisualStudioCodedeployment_id:test-123tenant_id: Your test tenantcallback_url: Your deployment URL +/api/package/callback
- Click Run workflow
- Go to Actions tab
- Click on a workflow run to see details
- Expand steps to see logs
Workflow not triggering:
- Verify PAT has correct scopes
- Check workflow is enabled
- Verify environment variables are correct
IntuneWinAppUtil fails:
- Check app ID is valid
- Verify the app has a supported installer type
- Check runner has enough disk space
Callback fails:
- Verify
CALLBACK_SECRETmatches - Check
NEXT_PUBLIC_URLis accessible from GitHub - Review callback endpoint logs
GitHub Actions usage:
- Public repos: Free
- Private repos: 2,000 minutes/month free, then $0.008/minute for Windows
Each packaging job typically takes 2-5 minutes.
- PAT scope: Use minimal necessary permissions
- Secret rotation: Rotate PAT and secrets periodically
- Fork security: Review PRs before merging (could modify workflows)
- Runner security: If self-hosting, keep runner machine updated