Merge branch 'master' into staging-next
This commit is contained in:
@@ -112,18 +112,6 @@ jobs:
|
||||
with:
|
||||
headBranch: ${{ needs.prepare.outputs.headBranch }}
|
||||
|
||||
reviewers:
|
||||
name: Reviewers
|
||||
needs: [prepare, eval]
|
||||
if: |
|
||||
needs.prepare.outputs.targetSha &&
|
||||
!contains(fromJSON(needs.prepare.outputs.headBranch).type, 'development')
|
||||
uses: ./.github/workflows/reviewers.yml
|
||||
secrets:
|
||||
OWNER_APP_PRIVATE_KEY: ${{ secrets.OWNER_APP_PRIVATE_KEY }}
|
||||
with:
|
||||
artifact-prefix: ${{ inputs.artifact-prefix }}
|
||||
|
||||
build:
|
||||
name: Build
|
||||
needs: [prepare]
|
||||
|
||||
@@ -1,157 +0,0 @@
|
||||
# This workflow will request reviews from the maintainers of each package
|
||||
# listed in the PR's most recent eval comparison artifact.
|
||||
|
||||
name: Reviewers
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [ready_for_review]
|
||||
workflow_call:
|
||||
inputs:
|
||||
artifact-prefix:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
OWNER_APP_PRIVATE_KEY:
|
||||
required: true
|
||||
|
||||
concurrency:
|
||||
group: reviewers-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions: {}
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
request:
|
||||
runs-on: ubuntu-24.04-arm
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
- name: Check out the PR at the base commit
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
path: trusted
|
||||
sparse-checkout: ci
|
||||
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
|
||||
- name: Build the requestReviews derivation
|
||||
run: nix-build trusted/ci -A requestReviews
|
||||
|
||||
# For requesting reviewers, this job depends on a GitHub App with the following permissions:
|
||||
# - Permissions:
|
||||
# - Repository > Administration: read-only
|
||||
# - Organization > Members: read-only
|
||||
# - Repository > Pull Requests: read-write
|
||||
# - Install App on this repository, setting these variables:
|
||||
# - OWNER_APP_ID (variable)
|
||||
# - OWNER_APP_PRIVATE_KEY (secret)
|
||||
#
|
||||
# Can't use the token received from permissions above, because it can't get enough permissions.
|
||||
- uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
|
||||
if: github.event_name == 'pull_request_target' && vars.OWNER_APP_ID
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.OWNER_APP_ID }}
|
||||
private-key: ${{ secrets.OWNER_APP_PRIVATE_KEY }}
|
||||
permission-administration: read
|
||||
permission-members: read
|
||||
permission-pull-requests: write
|
||||
|
||||
- name: Log current API rate limits (github.token)
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
# In the regular case, this workflow is called via workflow_call from the eval workflow directly.
|
||||
# In the more special case, when a PR is undrafted an eval run will have started already.
|
||||
- name: Wait for comparison to be done
|
||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
id: eval
|
||||
env:
|
||||
ARTIFACT: ${{ inputs.artifact-prefix }}comparison
|
||||
with:
|
||||
script: |
|
||||
const run_id = (await github.rest.actions.listWorkflowRuns({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
workflow_id: context.eventName === 'pull_request' ? 'test.yml' : 'pull-request-target.yml',
|
||||
event: context.eventName,
|
||||
head_sha: context.payload.pull_request.head.sha
|
||||
})).data.workflow_runs[0].id
|
||||
|
||||
core.setOutput('run-id', run_id)
|
||||
|
||||
// Waiting 120 * 5 sec = 10 min. max.
|
||||
// The extreme case is an Eval run that just started when the PR is undrafted.
|
||||
// Eval takes max 5-6 minutes, normally.
|
||||
for (let i = 0; i < 120; i++) {
|
||||
const result = await github.rest.actions.listWorkflowRunArtifacts({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id,
|
||||
name: process.env.ARTIFACT,
|
||||
})
|
||||
if (result.data.total_count > 0) return
|
||||
await new Promise(resolve => setTimeout(resolve, 5000))
|
||||
}
|
||||
throw new Error("No comparison artifact found.")
|
||||
|
||||
- name: Log current API rate limits (github.token)
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
- name: Download the comparison results
|
||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||
with:
|
||||
run-id: ${{ steps.eval.outputs.run-id }}
|
||||
github-token: ${{ github.token }}
|
||||
pattern: ${{ inputs.artifact-prefix }}comparison
|
||||
path: comparison
|
||||
merge-multiple: true
|
||||
|
||||
- name: Log current API rate limits (app-token)
|
||||
if: ${{ steps.app-token.outputs.token }}
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
- name: Log current API rate limits (github.token)
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
- name: Requesting reviews
|
||||
if: ${{ steps.app-token.outputs.token }}
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
APP_GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
REPOSITORY: ${{ github.repository }}
|
||||
NUMBER: ${{ github.event.number }}
|
||||
AUTHOR: ${{ github.event.pull_request.user.login }}
|
||||
# Don't request reviewers on draft PRs
|
||||
DRY_MODE: ${{ github.event.pull_request.draft && '1' || '' }}
|
||||
run: |
|
||||
# maintainers.json contains GitHub IDs. Look up handles to request reviews from.
|
||||
# There appears to be no API to request reviews based on GitHub IDs
|
||||
jq -r 'keys[]' comparison/maintainers.json \
|
||||
| while read -r id; do gh api /user/"$id" --jq .login; done \
|
||||
| cat comparison/owners.txt - \
|
||||
| GH_TOKEN="$APP_GH_TOKEN" result/bin/request-reviewers.sh "$REPOSITORY" "$NUMBER" "$AUTHOR"
|
||||
|
||||
- name: Log current API rate limits (app-token)
|
||||
if: ${{ steps.app-token.outputs.token }}
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
- name: Log current API rate limits (github.token)
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
@@ -69,7 +69,6 @@ jobs:
|
||||
'.github/workflows/eval.yml',
|
||||
'.github/workflows/lint.yml',
|
||||
'.github/workflows/pull-request-target.yml',
|
||||
'.github/workflows/reviewers.yml',
|
||||
'.github/workflows/test.yml',
|
||||
'ci/github-script/bot.js',
|
||||
'ci/github-script/merge.js',
|
||||
|
||||
@@ -156,7 +156,6 @@ let
|
||||
in
|
||||
rec {
|
||||
inherit pkgs fmt;
|
||||
requestReviews = pkgs.callPackage ./request-reviews { };
|
||||
codeownersValidator = pkgs.callPackage ./codeowners-validator { };
|
||||
|
||||
# FIXME(lf-): it might be useful to test other Nix implementations
|
||||
|
||||
+48
-13
@@ -5,6 +5,7 @@ module.exports = async ({ github, context, core, dry }) => {
|
||||
const withRateLimit = require('./withRateLimit.js')
|
||||
const { classify } = require('../supportedBranches.js')
|
||||
const { handleMerge } = require('./merge.js')
|
||||
const { handleReviewers } = require('./reviewers.js')
|
||||
|
||||
const artifactClient = new DefaultArtifactClient()
|
||||
|
||||
@@ -209,10 +210,16 @@ module.exports = async ({ github, context, core, dry }) => {
|
||||
}
|
||||
}
|
||||
|
||||
const reviews = await github.paginate(github.rest.pulls.listReviews, {
|
||||
...context.repo,
|
||||
pull_number,
|
||||
})
|
||||
// Check for any human reviews other than GitHub actions and other GitHub apps.
|
||||
// Accounts could be deleted as well, so don't count them.
|
||||
const reviews = (
|
||||
await github.paginate(github.rest.pulls.listReviews, {
|
||||
...context.repo,
|
||||
pull_number,
|
||||
})
|
||||
).filter(
|
||||
(r) => r.user && !r.user.login.endsWith('[bot]') && r.user.type !== 'Bot',
|
||||
)
|
||||
|
||||
const approvals = new Set(
|
||||
reviews
|
||||
@@ -282,13 +289,6 @@ module.exports = async ({ github, context, core, dry }) => {
|
||||
log('Last eval run', run_id ?? '<n/a>')
|
||||
|
||||
if (conclusion === 'success') {
|
||||
// Check for any human reviews other than GitHub actions and other GitHub apps.
|
||||
// Accounts could be deleted as well, so don't count them.
|
||||
const humanReviews = reviews.filter(
|
||||
(r) =>
|
||||
r.user && !r.user.login.endsWith('[bot]') && r.user.type !== 'Bot',
|
||||
)
|
||||
|
||||
Object.assign(prLabels, {
|
||||
// We only set this label if the latest eval run was successful, because if it was not, it
|
||||
// *could* have requested reviewers. We will let the PR author fix CI first, before "escalating"
|
||||
@@ -301,7 +301,7 @@ module.exports = async ({ github, context, core, dry }) => {
|
||||
'9.needs: reviewer':
|
||||
!pull_request.draft &&
|
||||
pull_request.requested_reviewers.length === 0 &&
|
||||
humanReviews.length === 0,
|
||||
reviews.length === 0,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -373,6 +373,41 @@ module.exports = async ({ github, context, core, dry }) => {
|
||||
maintainers[pkg]?.some((m) => approvals.has(m)),
|
||||
),
|
||||
})
|
||||
|
||||
if (!pull_request.draft) {
|
||||
let owners = []
|
||||
try {
|
||||
// TODO: Create owner map similar to maintainer map.
|
||||
owners = (await readFile(`${pull_number}/owners.txt`, 'utf-8')).split(
|
||||
'\n',
|
||||
)
|
||||
} catch (e) {
|
||||
// Older artifacts don't have the owners.txt, yet.
|
||||
if (e.code !== 'ENOENT') throw e
|
||||
}
|
||||
|
||||
// We set this label earlier already, but the current PR state can be very different
|
||||
// after handleReviewers has requested reviews, so update it in this case to prevent
|
||||
// this label from flip-flopping.
|
||||
prLabels['9.needs: reviewer'] = await handleReviewers({
|
||||
github,
|
||||
context,
|
||||
core,
|
||||
log,
|
||||
dry,
|
||||
pull_request,
|
||||
reviews,
|
||||
// TODO: Use maintainer map instead of the artifact.
|
||||
maintainers: Object.keys(
|
||||
JSON.parse(
|
||||
await readFile(`${pull_number}/maintainers.json`, 'utf-8'),
|
||||
),
|
||||
).map((id) => parseInt(id)),
|
||||
owners,
|
||||
getTeamMembers,
|
||||
getUser,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return prLabels
|
||||
@@ -521,7 +556,7 @@ module.exports = async ({ github, context, core, dry }) => {
|
||||
const hasChanges = Object.keys(after).some(
|
||||
(name) => (before[name] ?? false) !== after[name],
|
||||
)
|
||||
if (log('Has changes', hasChanges, !hasChanges)) return
|
||||
if (log('Has label changes', hasChanges, !hasChanges)) return
|
||||
|
||||
// Skipping labeling on a pull_request event, because we have no privileges.
|
||||
const labels = Object.entries(after)
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
async function handleReviewers({
|
||||
github,
|
||||
context,
|
||||
core,
|
||||
log,
|
||||
dry,
|
||||
pull_request,
|
||||
reviews,
|
||||
maintainers,
|
||||
owners,
|
||||
getTeamMembers,
|
||||
getUser,
|
||||
}) {
|
||||
const pull_number = pull_request.number
|
||||
|
||||
const users = new Set([
|
||||
...(await Promise.all(
|
||||
maintainers.map(async (id) => (await getUser(id)).login),
|
||||
)),
|
||||
...owners.filter((handle) => handle && !handle.includes('/')),
|
||||
])
|
||||
log('reviewers - users', Array.from(users).join(', '))
|
||||
|
||||
const teams = new Set(
|
||||
owners
|
||||
.map((handle) => handle.split('/'))
|
||||
.filter(([org, slug]) => org === context.repo.owner && slug)
|
||||
.map(([, slug]) => slug),
|
||||
)
|
||||
log('reviewers - teams', Array.from(teams).join(', '))
|
||||
|
||||
const team_members = new Set(
|
||||
(await Promise.all(Array.from(teams, getTeamMembers)))
|
||||
.flat(1)
|
||||
.map(({ login }) => login),
|
||||
)
|
||||
log('reviewers - team_members', Array.from(team_members).join(', '))
|
||||
|
||||
const new_reviewers = users
|
||||
.union(team_members)
|
||||
// We can't request a review from the author.
|
||||
.difference(new Set([pull_request.user?.login]))
|
||||
log('reviewers - new_reviewers', Array.from(new_reviewers).join(', '))
|
||||
|
||||
// Filter users to repository collaborators. If they're not, they can't be requested
|
||||
// for review. In that case, they probably missed their invite to the maintainers team.
|
||||
const reviewers = (
|
||||
await Promise.all(
|
||||
Array.from(new_reviewers, async (username) => {
|
||||
try {
|
||||
await github.rest.repos.checkCollaborator({
|
||||
...context.repo,
|
||||
username,
|
||||
})
|
||||
return username
|
||||
} catch (e) {
|
||||
if (e.status !== 404) throw e
|
||||
core.warning(
|
||||
`PR #${pull_number}: User ${username} cannot be requested for review because they don't exist or are not a repository collaborator, ignoring. They probably missed the automated invite to the maintainers team (see <https://github.com/NixOS/nixpkgs/issues/234293>).`,
|
||||
)
|
||||
}
|
||||
}),
|
||||
)
|
||||
).filter(Boolean)
|
||||
log('reviewers - reviewers', reviewers.join(', '))
|
||||
|
||||
if (reviewers.length > 15) {
|
||||
log(
|
||||
`Too many reviewers (${reviewers.join(', ')}), skipping review requests.`,
|
||||
)
|
||||
// false indicates, that we do have reviewers and don't need the "needs: reviewers" label.
|
||||
return false
|
||||
}
|
||||
|
||||
const requested_reviewers = new Set(
|
||||
pull_request.requested_reviewers.map(({ login }) => login),
|
||||
)
|
||||
log(
|
||||
'reviewers - requested_reviewers',
|
||||
Array.from(requested_reviewers).join(', '),
|
||||
)
|
||||
|
||||
const existing_reviewers = new Set(
|
||||
reviews.map(({ user }) => user?.login).filter(Boolean),
|
||||
)
|
||||
log(
|
||||
'reviewers - existing_reviewers',
|
||||
Array.from(existing_reviewers).join(', '),
|
||||
)
|
||||
|
||||
const non_requested_reviewers = new Set(reviewers)
|
||||
.difference(requested_reviewers)
|
||||
// We don't want to rerequest reviews from people who already reviewed.
|
||||
.difference(existing_reviewers)
|
||||
log(
|
||||
'reviewers - non_requested_reviewers',
|
||||
Array.from(non_requested_reviewers).join(', '),
|
||||
)
|
||||
|
||||
if (non_requested_reviewers.size === 0) {
|
||||
log('Has reviewer changes', 'false (skipped)')
|
||||
} else if (dry) {
|
||||
core.info(
|
||||
`Requesting reviewers for #${pull_number}: ${Array.from(non_requested_reviewers).join(', ')} (dry)`,
|
||||
)
|
||||
} else {
|
||||
// We had tried the "request all reviewers at once" thing in the past, but it didn't work out:
|
||||
// https://github.com/NixOS/nixpkgs/commit/034613f860fcd339bd2c20c8f6bc259a2f9dc034
|
||||
// If we're hitting API errors here again, we'll need to investigate - and possibly reverse
|
||||
// course.
|
||||
await github.rest.pulls.requestReviewers({
|
||||
...context.repo,
|
||||
pull_number,
|
||||
reviewers,
|
||||
})
|
||||
}
|
||||
|
||||
// Return a boolean on whether the "needs: reviewers" label should be set.
|
||||
return (
|
||||
new_reviewers.size === 0 &&
|
||||
existing_reviewers.size === 0 &&
|
||||
requested_reviewers.size === 0
|
||||
)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
handleReviewers,
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
stdenvNoCC,
|
||||
makeWrapper,
|
||||
coreutils,
|
||||
jq,
|
||||
github-cli,
|
||||
}:
|
||||
stdenvNoCC.mkDerivation {
|
||||
name = "request-reviews";
|
||||
src = lib.fileset.toSource {
|
||||
root = ./.;
|
||||
fileset = lib.fileset.unions [
|
||||
./request-reviewers.sh
|
||||
];
|
||||
};
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
for bin in *.sh; do
|
||||
mv "$bin" "$out/bin"
|
||||
wrapProgram "$out/bin/$bin" \
|
||||
--set PATH ${
|
||||
lib.makeBinPath [
|
||||
coreutils
|
||||
jq
|
||||
github-cli
|
||||
]
|
||||
}
|
||||
done
|
||||
'';
|
||||
}
|
||||
@@ -1,120 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Request reviewers for a PR, reading line-separated usernames on stdin,
|
||||
# filtering for valid reviewers before using the API endpoint to request reviews:
|
||||
# https://docs.github.com/en/rest/pulls/review-requests?apiVersion=2022-11-28#request-reviewers-for-a-pull-request
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
tmp=$(mktemp -d)
|
||||
trap 'rm -rf "$tmp"' exit
|
||||
|
||||
log() {
|
||||
echo "$@" >&2
|
||||
}
|
||||
|
||||
effect() {
|
||||
if [[ -n "${DRY_MODE:-}" ]]; then
|
||||
log "Skipping in dry mode:" "${@@Q}"
|
||||
else
|
||||
"$@"
|
||||
fi
|
||||
}
|
||||
|
||||
if (( "$#" < 3 )); then
|
||||
log "Usage: $0 BASE_REPO PR_NUMBER PR_AUTHOR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
baseRepo=$1
|
||||
prNumber=$2
|
||||
prAuthor=$3
|
||||
|
||||
tmp=$(mktemp -d)
|
||||
trap 'rm -rf "$tmp"' exit
|
||||
|
||||
# Associative array with the user as the key for easy de-duplication
|
||||
# Make sure to always lowercase keys to avoid duplicates with different casings
|
||||
declare -A users=()
|
||||
while read -r handle && [[ -n "$handle" ]]; do
|
||||
if [[ "$handle" =~ (.*)/(.*) ]]; then
|
||||
# Teams look like $org/$team
|
||||
org=${BASH_REMATCH[1]}
|
||||
team=${BASH_REMATCH[2]}
|
||||
|
||||
# Instead of requesting a review from the team itself,
|
||||
# we request reviews from the individual users.
|
||||
# This is because once somebody from a team reviewed the PR,
|
||||
# the API doesn't expose that the team was already requested for a review,
|
||||
# so we wouldn't be able to avoid rerequesting reviews
|
||||
# without saving some some extra state somewhere
|
||||
|
||||
# We could also consider implementing a more advanced heuristic
|
||||
# in the future that e.g. only pings one team member,
|
||||
# but escalates to somebody else if that member doesn't respond in time.
|
||||
gh api \
|
||||
--cache=1h \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"/orgs/$org/teams/$team/members" \
|
||||
--jq '.[].login' > "$tmp/team-members"
|
||||
readarray -t members < "$tmp/team-members"
|
||||
log "Team $handle has these members: ${members[*]}"
|
||||
|
||||
for user in "${members[@]}"; do
|
||||
users[${user,,}]=
|
||||
done
|
||||
else
|
||||
# Everything else is a user
|
||||
users[${handle,,}]=
|
||||
fi
|
||||
done
|
||||
|
||||
# Cannot request a review from the author
|
||||
if [[ -v users[${prAuthor,,}] ]]; then
|
||||
log "One or more files are owned by the PR author, ignoring"
|
||||
unset 'users[${prAuthor,,}]'
|
||||
fi
|
||||
|
||||
gh api \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"/repos/$baseRepo/pulls/$prNumber/reviews" \
|
||||
--jq '.[].user.login' > "$tmp/already-reviewed-by"
|
||||
|
||||
# And we don't want to rerequest reviews from people who already reviewed
|
||||
while read -r user; do
|
||||
if [[ -v users[${user,,}] ]]; then
|
||||
log "User $user is a potential reviewer, but has already left a review, ignoring"
|
||||
unset 'users[${user,,}]'
|
||||
fi
|
||||
done < "$tmp/already-reviewed-by"
|
||||
|
||||
for user in "${!users[@]}"; do
|
||||
if ! gh api \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"/repos/$baseRepo/collaborators/$user" >&2; then
|
||||
log "User $user is not a repository collaborator, probably missed the automated invite to the maintainers team (see <https://github.com/NixOS/nixpkgs/issues/234293>), ignoring"
|
||||
unset 'users[$user]'
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "${#users[@]}" -gt 15 ]]; then
|
||||
log "Too many reviewers (${!users[*]}), skipping review requests"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for user in "${!users[@]}"; do
|
||||
log "Requesting review from: $user"
|
||||
|
||||
if ! response=$(jq -n --arg user "$user" '{ reviewers: [ $user ] }' | \
|
||||
effect gh api \
|
||||
--method POST \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"/repos/$baseRepo/pulls/$prNumber/requested_reviewers" \
|
||||
--input -); then
|
||||
log "Failed to request review from $user: $response"
|
||||
fi
|
||||
done
|
||||
@@ -1,7 +1,7 @@
|
||||
{ lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
seed-nid = "z6Mkg52RcwDrPKRzzHaYgBkHH3Gi5p4694fvPstVE9HTyMB6";
|
||||
seed-nid = "z6MkhwX7wBkHQvcLazu2KDFK6UifGkLcoxNm2iA38fPH9LwU";
|
||||
seed-ssh-keys = import ./ssh-keys.nix pkgs;
|
||||
|
||||
radicleConfig =
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
let
|
||||
# The Node ID depends on nodes.seed.services.radicle.privateKeyFile
|
||||
seed-nid = "z6Mkg52RcwDrPKRzzHaYgBkHH3Gi5p4694fvPstVE9HTyMB6";
|
||||
seed-nid = "z6MkhwX7wBkHQvcLazu2KDFK6UifGkLcoxNm2iA38fPH9LwU";
|
||||
seed-ssh-keys = import ./ssh-keys.nix pkgs;
|
||||
seed-tls-certs = import common/acme/server/snakeoil-certs.nix;
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "claude-code";
|
||||
publisher = "anthropic";
|
||||
version = "2.0.31";
|
||||
hash = "sha256-ylcb5Ty9x9uj38OY0RXsS+YNKVKUzc1c5x6RJsZ3E2g=";
|
||||
version = "2.0.34";
|
||||
hash = "sha256-e+pjuGY0xrg43+pDDkQ4Svb1yBx2Fv+Z8WZoJv/k6D4=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -10,16 +10,16 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "biome";
|
||||
version = "2.3.2";
|
||||
version = "2.3.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "biomejs";
|
||||
repo = "biome";
|
||||
rev = "@biomejs/biome@${finalAttrs.version}";
|
||||
hash = "sha256-SUihyk1tbSiF3uY19/T9ZgQsURVc81p8lFMN933p6f0=";
|
||||
hash = "sha256-81eM8EK2ORtsEyOTTgNFZxK8pCPBKq7YSfUmIVL91VI=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-nzQb2GJFltktA10Rrl7tltHVjVYNPgLNpDzOXCHQeQA=";
|
||||
cargoHash = "sha256-6F6UJJRETOr476h12OHcT1U4iTAkoVuomikIvlrWyqE=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "capslock";
|
||||
version = "0.2.8";
|
||||
version = "0.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "google";
|
||||
repo = "capslock";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-7FMsW51LYEjEXcil6e64tAHaBeDAYRnBBX4E1PjSXtU=";
|
||||
hash = "sha256-ls7+aXEelxKXhittK4orv9xgPKw1pE87yZdoSHBUgK8=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-UOpreQceWgwbQ+Qup4iEStQqJA77uiiupfTUFxNBIcM=";
|
||||
vendorHash = "sha256-2nK+yxgLmrXjt41gYSXvkpZ2glu6PAtO18Nrt1tmup4=";
|
||||
|
||||
subPackages = [ "cmd/capslock" ];
|
||||
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cargo-show-asm";
|
||||
version = "0.2.53";
|
||||
version = "0.2.54";
|
||||
|
||||
src = fetchCrate {
|
||||
inherit pname version;
|
||||
hash = "sha256-t6HvflVpYa23xRn0Z9bD3RjrFDiBnkhx+0FUtBjTTtg=";
|
||||
hash = "sha256-AF8fFPdiSZ/odPg3Kp72+LlJ+ox0PU+dH1fhPSt61n8=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-Y3BIQmQ2eH/QnEdv+skl9ppwEmuJ8JMg8mLgUDGRP+8=";
|
||||
cargoHash = "sha256-cSlM0Ci0fXhAw7vfTxdkL9a4L9r76XdaR5URYYGAdd0=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
installShellFiles
|
||||
|
||||
@@ -10,16 +10,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cargo-udeps";
|
||||
version = "0.1.59";
|
||||
version = "0.1.60";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "est31";
|
||||
repo = "cargo-udeps";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-oA/oWXTaQPY7bCBUP52b+PACZXV+32G3/STh+sec6AI=";
|
||||
sha256 = "sha256-NW9yjFUV+o7vv5bYD8nxSWHOXOBnDEk36xze90wYuNg=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-X+Y2ialZnwusy3XVnXiTcGmSYsKsFOmEOL4Gc5SgXWU=";
|
||||
cargoHash = "sha256-vQvtc/CwV1aHeREzmzO8k1FcebbEp3FKMAJb0v2aQig=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "esp-generate";
|
||||
version = "1.0.0";
|
||||
version = "1.0.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "esp-rs";
|
||||
repo = "esp-generate";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-lcxYsMeigXjwFdJQ4fJZnQL9PqVhgr7bOIsaTu2Oa88=";
|
||||
hash = "sha256-OQUBX0hZNEgMpBttWZDXI/eoOlxVfY57oZqn3YKNZ0o=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-0p07C4OGHOkEivnokti0s9z+xXdcayUOkzTqksxUZ6o=";
|
||||
cargoHash = "sha256-Sf37qp1TBCabgKIExs9biqvdN+KtIBPGeokLMovjM68=";
|
||||
|
||||
meta = {
|
||||
description = "Template generation tool to create no_std applications targeting Espressif's chips";
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "exploitdb";
|
||||
version = "2025-10-30";
|
||||
version = "2025-11-01";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "exploit-database";
|
||||
repo = "exploitdb";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-3e1NRjuLNgxKTEPTAhNp1rJNJ7ZQGnPZOXCCpuAYvLM=";
|
||||
hash = "sha256-MXWP7YOv4JAIKerAGuSeiAiQ98sRU6mZ1ZQSJBPCZQs=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
fetchurl,
|
||||
fetchFromGitHub,
|
||||
runCommand,
|
||||
unstableGitUpdater,
|
||||
gitUpdater,
|
||||
catch2_3,
|
||||
cmake,
|
||||
fontconfig,
|
||||
@@ -78,14 +78,17 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "fire";
|
||||
version = "1.5.0b-unstable-2025-09-20";
|
||||
# 1.5.0b is considered a beta release of 1.5.0, but gitUpdater identifies 1.5.0b as the newer version
|
||||
# Sanity checked manually. Drop this once running the updateScript doesn't produce a downgrade.
|
||||
# nixpkgs-update: no auto update
|
||||
version = "1.5.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jerryuhoo";
|
||||
repo = "Fire";
|
||||
rev = "34a424a4fc50984213b6e98e3aaae3dcb8e960c4";
|
||||
tag = "v${finalAttrs.version}";
|
||||
fetchSubmodules = true;
|
||||
hash = "sha256-ZTsZ/J5aeyjg4pxhjjIkgoTB5sSg2jpeKAp/uc4V+aQ=";
|
||||
hash = "sha256-i8viPGErCuLSuRWstDtLwQ3XBz9gfiHin7Zvvq8l3kA=";
|
||||
};
|
||||
|
||||
postPatch =
|
||||
@@ -162,7 +165,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
patchelf --add-rpath ${lib.makeLibraryPath x11Libs} $out/bin/Fire
|
||||
'';
|
||||
|
||||
passthru.updateScript = unstableGitUpdater { tagPrefix = "v"; };
|
||||
passthru.updateScript = gitUpdater { rev-prefix = "v"; };
|
||||
|
||||
meta = {
|
||||
description = "Multi-band distortion plugin by Wings";
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "firefly-iii-data-importer";
|
||||
version = "1.9.0";
|
||||
version = "1.9.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "firefly-iii";
|
||||
repo = "data-importer";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-07i/78dF6yynSGAHc91899hLD1MKacBUJ5d455hn9mE=";
|
||||
hash = "sha256-AjpzJfer1v7+FLIGEcBJrMxUlda5MwV2ThJuV5MNIxQ=";
|
||||
};
|
||||
|
||||
buildInputs = [ php84 ];
|
||||
@@ -38,12 +38,12 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
composerStrictValidation = true;
|
||||
strictDeps = true;
|
||||
|
||||
vendorHash = "sha256-i4DZ62J5v/tskoaQ1GaE7b1VJcFOFIJW8xC8R4h4tHk=";
|
||||
vendorHash = "sha256-7nhoRnKcOnnBt0YxaMEXYHPqDjaCltDnSiCnMDCEq5M=";
|
||||
|
||||
npmDeps = fetchNpmDeps {
|
||||
inherit (finalAttrs) src;
|
||||
name = "${finalAttrs.pname}-npm-deps";
|
||||
hash = "sha256-KRMdcY9pkyXOPCwcNXOK1FJYWIcvDE6DRVX/aG8KzCs=";
|
||||
hash = "sha256-as11uXE3qBGz7HIkTEeFLznwevcS+yChETo4ElyRVl8=";
|
||||
};
|
||||
|
||||
composerRepository = php84.mkComposerRepository {
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
|
||||
rustPlatform.buildRustPackage {
|
||||
pname = "forecast";
|
||||
version = "0-unstable-2025-10-21";
|
||||
version = "0-unstable-2025-11-06";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cosmic-utils";
|
||||
repo = "forecast";
|
||||
rev = "8f04cafd809d58bdd46556b66f3aa4574e81fcbd";
|
||||
hash = "sha256-DRShCI/tBh/a3IM/UH8yujlJyEeqGJ+kbnqSF8AibS0=";
|
||||
rev = "51814ecac320185911743986e8ab0211140fa456";
|
||||
hash = "sha256-XOqV9Z4l4aTgm2Abec7IE2bk8oX3RsAA8UxZuo6S5l8=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-di7zjwI0/6NB2cAih3d7iqwSb+o/607jbgJN1MtbZX8=";
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
fetchYarnDeps,
|
||||
yarnConfigHook,
|
||||
yarnBuildHook,
|
||||
nodejs,
|
||||
findutils,
|
||||
makeBinaryWrapper,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "gatsby-cli";
|
||||
version = "5.15.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gatsbyjs";
|
||||
repo = "gatsby";
|
||||
tag = "gatsby-cli@${finalAttrs.version}";
|
||||
hash = "sha256-sNNbOV9UuCTYHp4cSK9ngCukUXDNV4iOIc9PPQVYymM=";
|
||||
};
|
||||
|
||||
yarnKeepDevDeps = true;
|
||||
|
||||
yarnOfflineCache = fetchYarnDeps {
|
||||
yarnLock = finalAttrs.src + "/yarn.lock";
|
||||
hash = "sha256-wfg9Nj9Z8vyp2NdE+fOTuM+pXnfM/r46CbfuE5f3fGU=";
|
||||
};
|
||||
|
||||
yarnBuildScript = "lerna";
|
||||
yarnBuildFlags = [
|
||||
"run"
|
||||
"build"
|
||||
"--scope"
|
||||
"gatsby-cli"
|
||||
"--include-dependencies"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
yarnConfigHook
|
||||
yarnBuildHook
|
||||
# Needed for executing package.json scripts
|
||||
nodejs
|
||||
findutils
|
||||
makeBinaryWrapper
|
||||
];
|
||||
|
||||
preBuild = ''
|
||||
patchShebangs packages/**/node_modules
|
||||
yarn run lerna run prepare --scope gatsby-cli --include-dependencies
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/lib/node_modules/
|
||||
mv packages/ $out/lib/packages/
|
||||
mv node_modules/* $out/lib/node_modules/
|
||||
|
||||
makeWrapper ${lib.getExe nodejs} $out/bin/gatsby \
|
||||
--add-flags $out/lib/packages/gatsby-cli/cli.js \
|
||||
--set NODE_PATH $out/lib/node_modules
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru.updateScript = nix-update-script {
|
||||
extraArgs = [
|
||||
"--version-regex"
|
||||
"'gatsby-cli@(.*)'"
|
||||
];
|
||||
};
|
||||
|
||||
meta = {
|
||||
changelog = "https://github.com/gatsbyjs/gatsby/releases/tag/gatsby%2540${finalAttrs.version}";
|
||||
description = "The Gatsby command line interface";
|
||||
homepage = "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-cli#readme";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ pyrox0 ];
|
||||
mainProgram = "gatsby";
|
||||
};
|
||||
})
|
||||
@@ -9,20 +9,20 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "hledger-fmt";
|
||||
version = "0.3.5";
|
||||
version = "0.3.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mondeja";
|
||||
repo = "hledger-fmt";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-VyDVdXxTge3ERTrkIIWgR75m7TaEbbPmFDNsoYOi9tM=";
|
||||
hash = "sha256-xjBU8LgVIPjb758I57gDfz5q3sot8sV93gMAPXY2jOw=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
installShellFiles
|
||||
];
|
||||
|
||||
cargoHash = "sha256-jn4ptV0IVnnXR2oCxxUnGaoWG/LBlRkf25/8Nasm9qI=";
|
||||
cargoHash = "sha256-LQxJWllRCD7moImQdDc8Xa0mrkCbbvYITg3pb204qVs=";
|
||||
|
||||
# Tests try to invoke the binary from "target/debug/hledger-fmt"
|
||||
# https://github.com/mondeja/hledger-fmt/blob/783abdb32eefb20195c7e9562858552935bb9c8e/src/cli/tests.rs#L5
|
||||
|
||||
@@ -7,15 +7,15 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "istioctl";
|
||||
version = "1.27.3";
|
||||
version = "1.28.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "istio";
|
||||
repo = "istio";
|
||||
rev = version;
|
||||
hash = "sha256-MgicdVRYHdp38lHY7VjAH+4xKD9sgEroEIwNkSmbfjU=";
|
||||
hash = "sha256-NLARp5Gw04UosyLw3TkEmtvSLKa+tYp4s60UKvcJOgw=";
|
||||
};
|
||||
vendorHash = "sha256-AJzEAFZZe4QtuYRcIJ8GwosbBi5gWn+DAOpVS8JnAdQ=";
|
||||
vendorHash = "sha256-ge9aR3ZYOJaYp0D1UWzzg40nXlwM/Sl1Ep+u1CmdSV8=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
||||
@@ -14,16 +14,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "jujutsu";
|
||||
version = "0.34.0";
|
||||
version = "0.35.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jj-vcs";
|
||||
repo = "jj";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-OW8kSDBBSZr0G3U27AAkZ3cH3TJmSARbg9Pc4qZ6tA0=";
|
||||
hash = "sha256-YUrjP2tzABdy4eAV1hPmgYWU8ChcJ5B4IlmQUGm95ro=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-/zC2z0evYs8VKta0uClTtl4l3tbDRcsVedGF2jtfQGA=";
|
||||
cargoHash = "sha256-9VCAmtY029+CFNFcYLdA/VyT5CIvJnuA3iwPOKZpYV0=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
installShellFiles
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "lintspec";
|
||||
version = "0.11.4";
|
||||
version = "0.12.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "beeb";
|
||||
repo = "lintspec";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-dd9j4eGXhNyaTOMiKK0qi8BW1Zy1kZ6+ZVMB7rrq4gE=";
|
||||
hash = "sha256-CxtzAtbjk7rS00EAvu6pMXN7VsF75tO79p7au5+4jGI=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-u83OgBEbZ4b2CLZv/M9Wv0tum3ZKZGOuba0leqfMDoo=";
|
||||
cargoHash = "sha256-kmv62yq4JdNv2komTjnsH5kjbaxI30iph3pKa2+qqck=";
|
||||
cargoBuildFlags = [
|
||||
"--package"
|
||||
"lintspec"
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
}:
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "models-dev";
|
||||
version = "0-unstable-2025-11-03";
|
||||
version = "0-unstable-2025-11-04";
|
||||
src = fetchFromGitHub {
|
||||
owner = "sst";
|
||||
repo = "models.dev";
|
||||
rev = "0e56ea3ccab064118f42687772368bc66f03f85e";
|
||||
hash = "sha256-D7W0HSiHk5LpZ+y1pZCrEsfYEQPVD9qrrbu+3MhjEYo=";
|
||||
rev = "234ba091f2d37ea925e4e38fecd7b3ed661b52a9";
|
||||
hash = "sha256-7djp/VoAWK29tcwD9mDPCTZiGeJKB8puOnlbEMgOqKQ=";
|
||||
};
|
||||
|
||||
node_modules = stdenvNoCC.mkDerivation {
|
||||
@@ -37,18 +37,11 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
|
||||
export BUN_INSTALL_CACHE_DIR=$(mktemp -d)
|
||||
|
||||
# NOTE: Starting with Bun 1.3.0, isolated builds became the default
|
||||
# behavior. In isolated builds, each package receives its own
|
||||
# `.node_modules` subdirectory containing only the dependencies
|
||||
# explicitly declared in that package's `package.json`. Since our build
|
||||
# process copies only the root-level `.node_modules` directory, we must
|
||||
# use `--linker=hoisted` to consolidate all dependencies there. Without
|
||||
# this flag, we would need to copy every individual `.node_modules`
|
||||
# subdirectory from each package.
|
||||
bun install \
|
||||
--filter=./packages/web \
|
||||
--force \
|
||||
--frozen-lockfile \
|
||||
--linker=hoisted \
|
||||
--ignore-scripts \
|
||||
--no-progress \
|
||||
--production
|
||||
|
||||
@@ -58,23 +51,21 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/node_modules
|
||||
cp -R ./node_modules $out
|
||||
# Copy node_modules directories
|
||||
while IFS= read -r dir; do
|
||||
rel="''${dir#./}"
|
||||
dest="$out/$rel"
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
cp -R "$dir" "$dest"
|
||||
done < <(find . -type d -name node_modules -prune)
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# Required else we get errors that our fixed-output derivation references store paths
|
||||
# NOTE: Required else we get errors that our fixed-output derivation references store paths
|
||||
dontFixup = true;
|
||||
|
||||
outputHash =
|
||||
{
|
||||
x86_64-linux = "sha256-Uajwvce9EO1UwmpkGrViOrxlm2R/VnnMK8WAiOiQOhY=";
|
||||
aarch64-linux = "sha256-brjdEEYBJ1R5pIkIHyOOmVieTJ0yUJEgxs7MtbzcKXo=";
|
||||
x86_64-darwin = "sha256-aGUWZwySmo0ojOBF/PioZ2wp4NRwYyoaJuytzeGYjck=";
|
||||
aarch64-darwin = "sha256-IM88XPfttZouN2DEtnWJmbdRxBs8wN7AZ1T28INJlBY=";
|
||||
}
|
||||
.${stdenvNoCC.hostPlatform.system};
|
||||
outputHash = "sha256-otke/XlxVafkgtM3wDMU+/GBBgrbD32+3E+Wyue8+U8=";
|
||||
outputHashAlgo = "sha256";
|
||||
outputHashMode = "recursive";
|
||||
};
|
||||
@@ -84,20 +75,16 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
cp -R ${finalAttrs.node_modules}/node_modules .
|
||||
cp -R ${finalAttrs.node_modules}/. .
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
preBuild = ''
|
||||
patchShebangs packages/web/script/build.ts
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
cd packages/web
|
||||
bun run build
|
||||
bun run ./script/build.ts
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
fetchFromGitHub,
|
||||
|
||||
hatchling,
|
||||
async-timeout,
|
||||
psycopg,
|
||||
pyicu,
|
||||
python-dotenv,
|
||||
@@ -13,14 +14,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "nominatim";
|
||||
version = "5.1.0";
|
||||
version = "5.2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "osm-search";
|
||||
repo = "Nominatim";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-eMCXXPrUZvM4ju0mi1+f+LXhThCCCEH+HDz6lurw+Jo=";
|
||||
hash = "sha256-ao4oEPz5rtRQtPC2UcIHH1M+o914JraASf+hcB2SDKA=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -38,6 +39,7 @@ buildPythonPackage rec {
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
async-timeout
|
||||
psycopg
|
||||
pyicu
|
||||
python-dotenv
|
||||
|
||||
@@ -21,14 +21,14 @@ let
|
||||
in
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "nominatim";
|
||||
version = "5.1.0";
|
||||
version = "5.2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "osm-search";
|
||||
repo = "Nominatim";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-eMCXXPrUZvM4ju0mi1+f+LXhThCCCEH+HDz6lurw+Jo=";
|
||||
hash = "sha256-ao4oEPz5rtRQtPC2UcIHH1M+o914JraASf+hcB2SDKA=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -57,7 +57,7 @@ let
|
||||
atLeast21 = lib.versionAtLeast featureVersion "21";
|
||||
atLeast23 = lib.versionAtLeast featureVersion "23";
|
||||
|
||||
gradle_openjfx = if atLeast23 then gradle_8 else gradle_7;
|
||||
gradle_openjfx = if atLeast21 then gradle_8 else gradle_7;
|
||||
in
|
||||
|
||||
assert lib.assertMsg (lib.pathExists sourceFile)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
libvpx,
|
||||
libyuv,
|
||||
zlib,
|
||||
makeWrapper,
|
||||
makeBinaryWrapper,
|
||||
makeDesktopItem,
|
||||
copyDesktopItems,
|
||||
pkg-config,
|
||||
@@ -43,7 +43,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
nasm
|
||||
makeWrapper
|
||||
makeBinaryWrapper
|
||||
copyDesktopItems
|
||||
pkg-config
|
||||
];
|
||||
@@ -78,22 +78,41 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
})
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
installPhase =
|
||||
lib.optionalString stdenv.hostPlatform.isLinux ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 ../srb2.png $out/share/icons/hicolor/256x256/apps/ringracers.png
|
||||
install -Dm755 bin/ringracers $out/bin/ringracers
|
||||
install -Dm644 ../srb2.png $out/share/icons/hicolor/256x256/apps/ringracers.png
|
||||
install -Dm755 bin/ringracers $out/bin/ringracers
|
||||
|
||||
wrapProgram $out/bin/ringracers \
|
||||
--set RINGRACERSWADDIR "${finalAttrs.assets}"
|
||||
wrapProgram $out/bin/ringracers \
|
||||
--set RINGRACERSWADDIR "${finalAttrs.assets}"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
runHook postInstall
|
||||
''
|
||||
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/Applications
|
||||
cp -r bin/ringracers.app $out/Applications/
|
||||
|
||||
wrapProgram $out/Applications/ringracers.app/Contents/MacOS/ringracers \
|
||||
--set RINGRACERSWADDIR "${finalAttrs.assets}"
|
||||
|
||||
mkdir -p $out/bin
|
||||
cat << EOF > "$out/bin/ringracers"
|
||||
#!${stdenv.shell}
|
||||
open -na "$out/Applications/ringracers.app" --args "\$@"
|
||||
EOF
|
||||
chmod +x $out/bin/ringracers
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Kart racing video game based on Sonic Robo Blast 2 (SRB2), itself based on a modified version of Doom Legacy";
|
||||
homepage = "https://kartkrew.org";
|
||||
platforms = lib.platforms.linux;
|
||||
platforms = lib.platforms.linux ++ lib.platforms.darwin;
|
||||
license = lib.licenses.gpl2Plus;
|
||||
maintainers = with lib.maintainers; [
|
||||
donovanglover
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "rsyncy";
|
||||
version = "2.1.0";
|
||||
version = "2.2.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "laktak";
|
||||
repo = "rsyncy";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-sy0aMYT7xrBfXB3YxLGL49jKVnRpWo5k+3mjQNAOagU=";
|
||||
hash = "sha256-ZWahPfAW6m86C0jdUB8Hfmx2A3i4NLsnAWI0HVoAbcE=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-vexWkbUQdkWrDJVvu2T4z4hbiCANuW0qLNFNSiTmYtY=";
|
||||
vendorHash = "sha256-xEjLMp4hbRrSvHBsuFxYsyNB7s2P876dV1NyAXycGoo=";
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
|
||||
@@ -26,14 +26,14 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "s7";
|
||||
version = "11.7-unstable-2025-10-29";
|
||||
version = "11.7-unstable-2025-11-05";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "cm-gitlab.stanford.edu";
|
||||
owner = "bil";
|
||||
repo = "s7";
|
||||
rev = "cb3da9a414401e447066c6f2ccd4476c2da886ec";
|
||||
hash = "sha256-RHYALNWKxQ5mgU/mvQVsVW87Efd+kxgIBkw7vOgwVAo=";
|
||||
rev = "fad53814de1ace0f9030e01f234ee4d139cfc514";
|
||||
hash = "sha256-RLYZPy5mn1Uk1vCoUwAy7V0Lv8rUeb0iX50+A1TBw0U=";
|
||||
};
|
||||
|
||||
buildInputs =
|
||||
|
||||
@@ -117,12 +117,12 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "shipwright";
|
||||
version = "9.1.0";
|
||||
version = "9.1.1";
|
||||
src = fetchFromGitHub {
|
||||
owner = "harbourmasters";
|
||||
repo = "shipwright";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-sRUg6wa0KOG+hoR+6QEVyPe/9O9yEefNB69BMO+H+iU=";
|
||||
hash = "sha256-TEP2YNKUuAnvLg+aDOkMmYfPQIjUXWYOhprfqsr8EgQ=";
|
||||
fetchSubmodules = true;
|
||||
deepClone = true;
|
||||
postFetch = ''
|
||||
|
||||
@@ -94,6 +94,8 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
--replace '"which "' '"${which}/bin/which "'
|
||||
substituteInPlace lib/exceptionhandler/exceptionhandler.cpp \
|
||||
--replace "which %s" "${which}/bin/which %s"
|
||||
substituteInPlace CMakeLists.txt \
|
||||
--replace-fail "CONFIGURE_WZ_COMPILER_WARNINGS()" ""
|
||||
'';
|
||||
|
||||
cmakeFlags = [
|
||||
|
||||
@@ -30,14 +30,14 @@ let
|
||||
# https://dldir1.qq.com/weixin/mac/mac-release.xml
|
||||
any-darwin =
|
||||
let
|
||||
version = "4.1.4.12-31227";
|
||||
version = "4.1.4.15-31252";
|
||||
version' = lib.replaceString "-" "_" version;
|
||||
in
|
||||
{
|
||||
inherit version;
|
||||
src = fetchurl {
|
||||
url = "https://dldir1v6.qq.com/weixin/Universal/Mac/xWeChatMac_universal_${version'}.dmg";
|
||||
hash = "sha256-xVWEABH3dzQkQpmhJ3gKXJd9lQ4fqN7ptkWLTpJ4vaY=";
|
||||
hash = "sha256-nG9fYaQjeCwYFV7yKdlUxbXnFALc1VomQ/hnGQtJ17o=";
|
||||
};
|
||||
};
|
||||
in
|
||||
@@ -45,17 +45,17 @@ let
|
||||
aarch64-darwin = any-darwin;
|
||||
x86_64-darwin = any-darwin;
|
||||
aarch64-linux = {
|
||||
version = "4.1.0.10";
|
||||
version = "4.1.0.13";
|
||||
src = fetchurl {
|
||||
url = "https://web.archive.org/web/20250930121708/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_arm64.AppImage";
|
||||
hash = "sha256-qkNLA8nILsIi2ciIzr9pb3PejhbEvZ5fe4GlmjyjrEI=";
|
||||
url = "https://web.archive.org/web/20251106024910/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_arm64.AppImage";
|
||||
hash = "sha256-/d5crM6IGd0k0fSlBSQx4TpIVX/8iib+an0VMkWMNdw=";
|
||||
};
|
||||
};
|
||||
x86_64-linux = {
|
||||
version = "4.1.0.10";
|
||||
version = "4.1.0.13";
|
||||
src = fetchurl {
|
||||
url = "https://web.archive.org/web/20250930121506/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage";
|
||||
hash = "sha256-d/zdb69gmIcgAFCbWLKGfmD8ZFfuDlYdOy7vUJ7SiXc=";
|
||||
url = "https://web.archive.org/web/20251106024907/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage";
|
||||
hash = "sha256-+r5Ebu40GVGG2m2lmCFQ/JkiDsN/u7XEtnLrB98602w=";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -51,11 +51,11 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "go";
|
||||
version = "1.24.9";
|
||||
version = "1.24.10";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://go.dev/dl/go${finalAttrs.version}.src.tar.gz";
|
||||
hash = "sha256-xy+BulT+AO/n8+dJnUAJeSRogbE7d16am7hVQcEb5pU=";
|
||||
hash = "sha256-NAANzEelF7ePzyZX7n0DMyilcHn+YMTti3uEJg0dGdM=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
case = case: out: { inherit case out; };
|
||||
in
|
||||
lib.switch coq.coq-version [
|
||||
(case "9.1" "1.3.1+9.1")
|
||||
(case "9.0" "1.3.1+9.0")
|
||||
(case "8.20" "1.3.1+8.20")
|
||||
(case "8.19" "1.3+8.19")
|
||||
@@ -80,6 +81,8 @@
|
||||
release."1.3.1+8.20".sha256 = "sha256-u8LB1KiACM5zVaoL7dSdHYvZgX7pf30VuqtjLLGuTzc=";
|
||||
release."1.3.1+9.0".rev = "v1.3.1-9.0";
|
||||
release."1.3.1+9.0".sha256 = "sha256-186Z0/wCuGAjIvG1LoYBMPooaC6HmnKWowYXuR0y6bA=";
|
||||
release."1.3.1+9.1".rev = "v1.3.1-9.1";
|
||||
release."1.3.1+9.1".sha256 = "sha256-LtYbAR3jt+JbYcqP+m1n3AZhAWSMIeOZtmdSJwg7L1A=";
|
||||
|
||||
mlPlugin = true;
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@ mapAliases {
|
||||
inherit (pkgs) fixjson; # added 2024-06-26
|
||||
flood = pkgs.flood; # Added 2023-07-25
|
||||
ganache = throw "ganache was removed because it was deprecated upstream"; # added 2024-12-02
|
||||
inherit (pkgs) gatsby-cli; # Added 2025-11-05
|
||||
generator-code = throw "generator-code was removed because it provides no executable"; # added 2023-09-24
|
||||
inherit (pkgs) git-run; # added 2024-06-26
|
||||
git-ssb = throw "git-ssb was removed because it was broken"; # added 2023-08-21
|
||||
|
||||
@@ -73,7 +73,6 @@
|
||||
, "fleek-cli"
|
||||
, "forever"
|
||||
, "fx"
|
||||
, "gatsby-cli"
|
||||
, "grunt-cli"
|
||||
, "makam"
|
||||
, "gulp-cli"
|
||||
|
||||
-986
File diff suppressed because it is too large
Load Diff
@@ -9,13 +9,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "botocore-stubs";
|
||||
version = "1.40.64";
|
||||
version = "1.40.65";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
pname = "botocore_stubs";
|
||||
inherit version;
|
||||
hash = "sha256-m6tH000Oxxg+BKM1bj+i3/wRru+oRFs3qzV8cJg4/xQ=";
|
||||
hash = "sha256-MfO51dsNHcZknRHBg8thOs8rXTKXnBYIUtSvtVRC7bo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ setuptools ];
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
chardet,
|
||||
fetchFromGitHub,
|
||||
idna,
|
||||
pythonOlder,
|
||||
requests,
|
||||
setuptools,
|
||||
urllib3,
|
||||
@@ -13,16 +12,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "frigidaire";
|
||||
version = "0.18.24";
|
||||
version = "0.18.28";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.8";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bm1549";
|
||||
repo = "frigidaire";
|
||||
tag = version;
|
||||
hash = "sha256-lpwzXeuFPvWV26AIAfzBHY3IiwEc8vThTXc/F0iyV1o=";
|
||||
hash = "sha256-2VleZyisva2HQPDmPoZbxnYu3t1S/HTuaZtFWFiU1nU=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -49,7 +46,7 @@ buildPythonPackage rec {
|
||||
description = "Python API for the Frigidaire devices";
|
||||
homepage = "https://github.com/bm1549/frigidaire";
|
||||
changelog = "https://github.com/bm1549/frigidaire/releases/tag/${src.tag}";
|
||||
license = with licenses; [ mit ];
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -43,14 +43,14 @@ in
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "imageio";
|
||||
version = "2.37.1";
|
||||
version = "2.37.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "imageio";
|
||||
repo = "imageio";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-eNS++8pD+m51IxRR23E98K0f3rwNez/UiByA+PSfUH8=";
|
||||
hash = "sha256-8wKTcmnep67zBMYgd6Gpr3wRCIrzYaqfytL1o7iBNAk=";
|
||||
};
|
||||
|
||||
postPatch = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "lxmf";
|
||||
version = "0.8.0";
|
||||
version = "0.9.1";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -18,7 +18,7 @@ buildPythonPackage rec {
|
||||
owner = "markqvist";
|
||||
repo = "lxmf";
|
||||
tag = version;
|
||||
hash = "sha256-toxie5QdrgwyvC9v0G7mvGS6/ZEqA5gpRtEeaHgspD0=";
|
||||
hash = "sha256-5sY6Sf4oRwSXQR0YAfqeSmW1aASTT2iZLd5+BFx+5Mw=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "nomadnet";
|
||||
version = "0.8.0";
|
||||
version = "0.9.1";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -21,7 +21,7 @@ buildPythonPackage rec {
|
||||
owner = "markqvist";
|
||||
repo = "NomadNet";
|
||||
tag = version;
|
||||
hash = "sha256-9XuwVz7p05jgFkDMuag07ibXxjM+MhkL4dLdRs/O3NI=";
|
||||
hash = "sha256-Rqs0x5KF3Nb/VMNBr6IriDWX7th4OrBj3x5tQhUIU3U=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -2,14 +2,20 @@
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
filelock,
|
||||
|
||||
# build-system
|
||||
poetry-core,
|
||||
|
||||
# optional dependencies
|
||||
filelock,
|
||||
psycopg,
|
||||
psycopg-pool,
|
||||
redis,
|
||||
|
||||
# test
|
||||
pytestCheckHook,
|
||||
pytest-asyncio,
|
||||
pytest-xdist,
|
||||
redis,
|
||||
redisTestHook,
|
||||
}:
|
||||
|
||||
@@ -41,6 +47,14 @@ buildPythonPackage rec {
|
||||
];
|
||||
};
|
||||
|
||||
# Show each test name and track the slowest
|
||||
# This helps with identifying bottlenecks in the test suite
|
||||
# that are causing the build to time out on Hydra.
|
||||
pytestFlags = [
|
||||
"--durations=10"
|
||||
"-vv"
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
pytest-asyncio
|
||||
@@ -49,18 +63,25 @@ buildPythonPackage rec {
|
||||
]
|
||||
++ lib.flatten (lib.attrValues optional-dependencies);
|
||||
|
||||
disabledTests = [
|
||||
# hangs
|
||||
"test_limiter_01"
|
||||
disabledTestPaths = [
|
||||
# Slow: > 1.5 seconds/test run standalone on a fast machine
|
||||
# (Apple M3 Max with highest performance settings and 36GB RAM)
|
||||
# and/or hang under load
|
||||
# https://github.com/vutran1710/PyrateLimiter/issues/245
|
||||
# https://github.com/vutran1710/PyrateLimiter/issues/247
|
||||
"tests/test_bucket_all.py"
|
||||
"tests/test_bucket_factory.py"
|
||||
"tests/test_limiter.py"
|
||||
"tests/test_multiprocessing.py"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "pyrate_limiter" ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Python Rate-Limiter using Leaky-Bucket Algorimth Family";
|
||||
homepage = "https://github.com/vutran1710/PyrateLimiter";
|
||||
changelog = "https://github.com/vutran1710/PyrateLimiter/blob/${src.tag}/CHANGELOG.md";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ kranzes ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ kranzes ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "tencentcloud-sdk-python";
|
||||
version = "3.0.1481";
|
||||
version = "3.0.1482";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "TencentCloud";
|
||||
repo = "tencentcloud-sdk-python";
|
||||
tag = version;
|
||||
hash = "sha256-bqfF1Z1hrFT2HR5At5v9gKWdKY/OEHTCBgGPo4LnStE=";
|
||||
hash = "sha256-dllmMdjI4osrtdTN5qo2k/KtEKDpF9G1Ul3JkegvMt0=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -1,10 +1,30 @@
|
||||
{
|
||||
"game": {
|
||||
"latest": {
|
||||
"linux": "52.05",
|
||||
"linux": "53.02",
|
||||
"darwin": "0.47.05"
|
||||
},
|
||||
"versions": {
|
||||
"53.02": {
|
||||
"df": {
|
||||
"version": "53.02",
|
||||
"urls": {
|
||||
"linux": {
|
||||
"url": "https://www.bay12games.com/dwarves/df_53_02_linux.tar.bz2",
|
||||
"outputHash": "sha256-SprD05MMynNCBr2oKnBYvimm+RmOoceEC2MF9IhCc5Q="
|
||||
}
|
||||
}
|
||||
},
|
||||
"hack": {
|
||||
"version": "53.02-r1",
|
||||
"git": {
|
||||
"url": "https://github.com/DFHack/dfhack.git",
|
||||
"revision": "53.02-r1",
|
||||
"outputHash": "sha256-ybDaFYNVhNS1xJU/dD8KBzNu3ceetFbvX7xNp5DLzyU="
|
||||
},
|
||||
"xmlRev": "99cb51ac849a17652dbb74efa757df5b5716a9ba"
|
||||
}
|
||||
},
|
||||
"52.05": {
|
||||
"df": {
|
||||
"version": "52.05",
|
||||
|
||||
@@ -2,10 +2,7 @@
|
||||
Test CUDA packages.
|
||||
|
||||
This release file is currently not tested on hydra.nixos.org
|
||||
because it requires unfree software, but it is tested by
|
||||
https://hydra.nix-community.org/jobset/nixpkgs/cuda-nixos-unstable.
|
||||
|
||||
Cf. https://github.com/nix-community/infra/pull/1335
|
||||
because it requires unfree software.
|
||||
|
||||
Test for example like this:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user