Repository navigation
Add unchecked congestion window algorithm #14
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| on: | ||
|
Check warning on line 1 in .github/workflows/release.yml
|
||
| pull_request_target: | ||
| paths: | ||
| - quiche/Cargo.toml | ||
| name: Release Checks | ||
| permissions: | ||
| # Draft releases are only visible to tokens with push access. | ||
| contents: write | ||
| pull-requests: read | ||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.event.pull_request.number }} | ||
| cancel-in-progress: true | ||
| jobs: | ||
| quiche_release_draft: | ||
| name: Check quiche release draft | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 5 | ||
| steps: | ||
| - name: Check quiche release draft | ||
| uses: actions/github-script@v7 | ||
| with: | ||
| script: | | ||
| const pr = context.payload.pull_request; | ||
| const manifestPath = 'quiche/Cargo.toml'; | ||
| async function getManifest(owner, repo, ref) { | ||
| const response = await github.rest.repos.getContent({ | ||
| owner, | ||
| repo, | ||
| path: manifestPath, | ||
| ref, | ||
| }); | ||
| return Buffer.from( | ||
| response.data.content, | ||
| response.data.encoding, | ||
| ).toString('utf8'); | ||
| } | ||
| function packageVersion(manifest) { | ||
| let inPackageSection = false; | ||
| for (const line of manifest.split(/\r?\n/)) { | ||
| const section = line.match(/^\s*\[([^\]]+)\]\s*$/); | ||
| if (section) { | ||
| if (section[1] === 'package') { | ||
| inPackageSection = true; | ||
| continue; | ||
| } | ||
| if (inPackageSection) { | ||
| break; | ||
| } | ||
| continue; | ||
| } | ||
| if (!inPackageSection) { | ||
| continue; | ||
| } | ||
| const version = line.match(/^\s*version\s*=\s*"([^"]+)"\s*$/); | ||
| if (version) { | ||
| return version[1]; | ||
| } | ||
| } | ||
| throw new Error(`No package version found in ${manifestPath}`); | ||
| } | ||
| const baseManifest = await getManifest( | ||
| pr.base.repo.owner.login, | ||
| pr.base.repo.name, | ||
| pr.base.sha, | ||
| ); | ||
| const headManifest = await getManifest( | ||
| pr.head.repo.owner.login, | ||
| pr.head.repo.name, | ||
| pr.head.sha, | ||
| ); | ||
| const baseVersion = packageVersion(baseManifest); | ||
| const headVersion = packageVersion(headManifest); | ||
| if (baseVersion === headVersion) { | ||
| core.info(`quiche version is unchanged at ${headVersion}`); | ||
| return; | ||
| } | ||
| core.info( | ||
| `quiche version changes from ${baseVersion} to ${headVersion}`, | ||
| ); | ||
| const releases = await github.paginate( | ||
| github.rest.repos.listReleases, | ||
| { | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| per_page: 100, | ||
| }, | ||
| ); | ||
| // quiche releases use the version as the tag name, without a crate | ||
| // prefix. Release PRs are not tagged until after they are merged, so | ||
| // check GitHub release drafts rather than git tags. | ||
| const releaseTag = headVersion; | ||
| const release = releases.find( | ||
| (release) => release.tag_name === releaseTag, | ||
| ); | ||
| if (!release) { | ||
| core.setFailed( | ||
| `No GitHub release draft exists for quiche ${headVersion}. ` + | ||
| `Create a draft release for the future ${releaseTag} tag before ` + | ||
| `merging this release PR.`, | ||
| ); | ||
| return; | ||
| } | ||
| if (!release.draft) { | ||
| core.setFailed( | ||
| `GitHub release ${release.html_url} exists for quiche ` + | ||
| `${headVersion}, but it is not a draft.`, | ||
| ); | ||
| return; | ||
| } | ||
| core.info(`Found GitHub release draft: ${release.html_url}`); | ||