Merge master into staging-next
This commit is contained in:
+1
-2
@@ -23,8 +23,7 @@ insert_final_newline = false
|
||||
|
||||
# see https://nixos.org/nixpkgs/manual/#chap-conventions
|
||||
|
||||
# Match json/lockfiles/markdown/nix/perl/python/ruby/shell/docbook files, set indent to spaces
|
||||
[*.{bash,js,json,lock,md,nix,pl,pm,py,rb,sh,xml}]
|
||||
[*.{bash,css,js,json,lock,md,nix,pl,pm,py,rb,sh,xml}]
|
||||
indent_style = space
|
||||
|
||||
# Match docbook files, set indent width of one
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
name: Checkout
|
||||
|
||||
description: 'Checkout into trusted / untrusted / pinned folders consistently.'
|
||||
|
||||
inputs:
|
||||
merged-as-untrusted-at:
|
||||
description: "Whether and which SHA to checkout for the merge commit in the ./untrusted folder."
|
||||
pinned-from:
|
||||
description: "Whether to checkout the pinned nixpkgs for CI and from where (trusted, untrusted)."
|
||||
target-as-trusted-at:
|
||||
description: "Whether and which SHA to checkout for the target commit in the ./trusted folder."
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- if: inputs.merged-as-untrusted-at
|
||||
# Would be great to do the checkouts in git worktrees of the existing spare checkout instead,
|
||||
# but Nix is broken with them:
|
||||
# https://github.com/NixOS/nix/issues/6073
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
ref: ${{ inputs.merged-as-untrusted-at }}
|
||||
path: untrusted
|
||||
|
||||
- if: inputs.target-as-trusted-at
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
ref: ${{ inputs.target-as-trusted-at }}
|
||||
path: trusted
|
||||
|
||||
- if: inputs.pinned-from
|
||||
id: pinned
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||
env:
|
||||
PINNED_FROM: ${{ inputs.pinned-from }}
|
||||
with:
|
||||
script: |
|
||||
const path = require('node:path')
|
||||
const pinned = require(path.resolve(path.join(process.env.PINNED_FROM, 'ci', 'pinned.json')))
|
||||
core.setOutput('pinned-at', pinned.pins.nixpkgs.revision)
|
||||
|
||||
- if: steps.pinned.outputs.pinned-at
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
ref: ${{ steps.pinned.outputs.pinned-at }}
|
||||
path: pinned
|
||||
sparse-checkout: |
|
||||
lib
|
||||
maintainers
|
||||
nixos/lib
|
||||
pkgs
|
||||
@@ -1,121 +0,0 @@
|
||||
name: Get merge commit
|
||||
|
||||
description: 'Checks whether the Pull Request is mergeable and checks out the repo at up to two commits: The result of a temporary merge of the head branch into the target branch ("merged"), and the parent of that commit on the target branch ("target"). Handles push events and merge conflicts gracefully.'
|
||||
|
||||
inputs:
|
||||
mergedSha:
|
||||
description: "The merge commit SHA, previously collected."
|
||||
type: string
|
||||
merged-as-untrusted:
|
||||
description: "Whether to checkout the merge commit in the ./untrusted folder."
|
||||
type: boolean
|
||||
pinnedFrom:
|
||||
description: "Whether to checkout the pinned nixpkgs for CI and from where (trusted, untrusted)."
|
||||
type: string
|
||||
targetSha:
|
||||
description: "The target commit SHA, previously collected."
|
||||
type: string
|
||||
target-as-trusted:
|
||||
description: "Whether to checkout the target commit in the ./trusted folder."
|
||||
type: boolean
|
||||
|
||||
outputs:
|
||||
mergedSha:
|
||||
description: "The merge commit SHA"
|
||||
value: ${{ steps.commits.outputs.mergedSha }}
|
||||
targetSha:
|
||||
description: "The target commit SHA"
|
||||
value: ${{ steps.commits.outputs.targetSha }}
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- id: commits
|
||||
if: ${{ !inputs.mergedSha && !inputs.targetSha }}
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||
with:
|
||||
script: |
|
||||
if (context.eventName == 'push') return core.setOutput('mergedSha', context.sha)
|
||||
|
||||
for (const retryInterval of [5, 10, 20, 40, 80]) {
|
||||
console.log("Checking whether the pull request can be merged...")
|
||||
const prInfo = (await github.rest.pulls.get({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.payload.pull_request.number
|
||||
})).data
|
||||
|
||||
if (prInfo.state != 'open') throw new Error ("PR is not open anymore.")
|
||||
|
||||
if (prInfo.mergeable == null) {
|
||||
console.log(`GitHub is still computing whether this PR can be merged, waiting ${retryInterval} seconds before trying again...`)
|
||||
await new Promise(resolve => setTimeout(resolve, retryInterval * 1000))
|
||||
continue
|
||||
}
|
||||
|
||||
let mergedSha, targetSha
|
||||
|
||||
if (prInfo.mergeable) {
|
||||
console.log("The PR can be merged.")
|
||||
|
||||
mergedSha = prInfo.merge_commit_sha
|
||||
targetSha = (await github.rest.repos.getCommit({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
ref: prInfo.merge_commit_sha
|
||||
})).data.parents[0].sha
|
||||
} else {
|
||||
console.log("The PR has a merge conflict.")
|
||||
|
||||
mergedSha = prInfo.head.sha
|
||||
targetSha = (await github.rest.repos.compareCommitsWithBasehead({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
basehead: `${prInfo.base.sha}...${prInfo.head.sha}`
|
||||
})).data.merge_base_commit.sha
|
||||
}
|
||||
|
||||
console.log(`Checking the commits:\nmerged:${mergedSha}\ntarget:${targetSha}`)
|
||||
core.setOutput('mergedSha', mergedSha)
|
||||
core.setOutput('targetSha', targetSha)
|
||||
return
|
||||
}
|
||||
throw new Error("Not retrying anymore. It's likely that GitHub is having internal issues: check https://www.githubstatus.com.")
|
||||
|
||||
- if: inputs.merged-as-untrusted && (inputs.mergedSha || steps.commits.outputs.mergedSha)
|
||||
# Would be great to do the checkouts in git worktrees of the existing spare checkout instead,
|
||||
# but Nix is broken with them:
|
||||
# https://github.com/NixOS/nix/issues/6073
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
ref: ${{ inputs.mergedSha || steps.commits.outputs.mergedSha }}
|
||||
path: untrusted
|
||||
|
||||
- if: inputs.target-as-trusted && (inputs.targetSha || steps.commits.outputs.targetSha)
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
ref: ${{ inputs.targetSha || steps.commits.outputs.targetSha }}
|
||||
path: trusted
|
||||
|
||||
- if: inputs.pinnedFrom
|
||||
id: pinned
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||
env:
|
||||
PINNED_FROM: ${{ inputs.pinnedFrom }}
|
||||
with:
|
||||
script: |
|
||||
const path = require('node:path')
|
||||
const pinned = require(path.resolve(path.join(process.env.PINNED_FROM, 'ci', 'pinned.json')))
|
||||
core.setOutput('pinnedSha', pinned.pins.nixpkgs.revision)
|
||||
|
||||
- if: steps.pinned.outputs.pinnedSha
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
ref: ${{ steps.pinned.outputs.pinnedSha }}
|
||||
path: pinned
|
||||
sparse-checkout: |
|
||||
lib
|
||||
maintainers
|
||||
nixos/lib
|
||||
pkgs
|
||||
|
||||
@@ -17,7 +17,7 @@ Some architectural notes about key decisions and concepts in our workflows:
|
||||
This is a temporary commit that GitHub creates automatically as "what would happen, if this PR was merged into the base branch now?".
|
||||
The checkout could be done via the virtual branch `refs/pull/<pr-number>/merge`, but doing so would cause failures when this virtual branch doesn't exist (anymore).
|
||||
This can happen when the PR has conflicts, in which case the virtual branch is not created, or when the PR is getting merged while workflows are still running, in which case the branch won't exist anymore at the time of checkout.
|
||||
Thus, we use the `get-merge-commit.yml` workflow to check whether the PR is mergeable and the test merge commit exists and only then run the relevant jobs.
|
||||
Thus, we use the `prepare` job to check whether the PR is mergeable and the test merge commit exists and only then run the relevant jobs.
|
||||
|
||||
- Various workflows need to make comparisons against the base branch.
|
||||
In this case, we checkout the parent of the "test merge commit" for best results.
|
||||
|
||||
@@ -47,12 +47,11 @@ jobs:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
sparse-checkout: .github/actions
|
||||
- name: Check if the PR can be merged and checkout the merge commit
|
||||
uses: ./.github/actions/get-merge-commit
|
||||
- name: Checkout the merge commit
|
||||
uses: ./.github/actions/checkout
|
||||
with:
|
||||
mergedSha: ${{ inputs.mergedSha }}
|
||||
merged-as-untrusted: true
|
||||
pinnedFrom: untrusted
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
pinned-from: untrusted
|
||||
|
||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
|
||||
with:
|
||||
@@ -61,9 +60,11 @@ jobs:
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
|
||||
name: nixpkgs-ci
|
||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
pushFilter: '(-source$|-nixpkgs-tarball-)'
|
||||
|
||||
- run: nix-env --install -f pinned -A nix-build-uncached
|
||||
|
||||
|
||||
@@ -9,6 +9,17 @@ on:
|
||||
headBranch:
|
||||
required: true
|
||||
type: string
|
||||
mergedSha:
|
||||
required: true
|
||||
type: string
|
||||
targetSha:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN:
|
||||
required: true
|
||||
OWNER_RO_APP_PRIVATE_KEY:
|
||||
required: true
|
||||
|
||||
permissions: {}
|
||||
|
||||
@@ -70,3 +81,72 @@ jobs:
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
# For checking code owners, this job depends on a GitHub App with the following permissions:
|
||||
# - Permissions:
|
||||
# - Repository > Administration: read-only
|
||||
# - Organization > Members: read-only
|
||||
# - Install App on this repository, setting these variables:
|
||||
# - OWNER_RO_APP_ID (variable)
|
||||
# - OWNER_RO_APP_PRIVATE_KEY (secret)
|
||||
#
|
||||
# This should not use the same app as the job to request reviewers, because this job requires
|
||||
# handling untrusted PR input.
|
||||
owners:
|
||||
runs-on: ubuntu-24.04-arm
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
sparse-checkout: .github/actions
|
||||
- name: Checkout merge and target commits
|
||||
uses: ./.github/actions/checkout
|
||||
with:
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
pinned-from: trusted
|
||||
target-as-trusted-at: ${{ inputs.targetSha }}
|
||||
|
||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
pushFilter: -source$
|
||||
|
||||
- name: Build codeowners validator
|
||||
run: nix-build trusted/ci --arg nixpkgs ./pinned -A codeownersValidator
|
||||
|
||||
- uses: actions/create-github-app-token@0f859bf9e69e887678d5bbfbee594437cb440ffe # v2.1.0
|
||||
if: github.event_name == 'pull_request_target' && vars.OWNER_RO_APP_ID
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.OWNER_RO_APP_ID }}
|
||||
private-key: ${{ secrets.OWNER_RO_APP_PRIVATE_KEY }}
|
||||
permission-administration: read
|
||||
permission-members: read
|
||||
|
||||
- name: Log current API rate limits
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
- name: Validate codeowners
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
OWNERS_FILE: untrusted/ci/OWNERS
|
||||
GITHUB_ACCESS_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
REPOSITORY_PATH: untrusted
|
||||
OWNER_CHECKER_REPOSITORY: ${{ github.repository }}
|
||||
# Set this to "notowned,avoid-shadowing" to check that all files are owned by somebody
|
||||
EXPERIMENTAL_CHECKS: "avoid-shadowing"
|
||||
run: result/bin/codeowners-validator
|
||||
|
||||
- name: Log current API rate limits
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
@@ -1,149 +0,0 @@
|
||||
# This workflow depends on two GitHub Apps with the following permissions:
|
||||
# - For checking code owners:
|
||||
# - Permissions:
|
||||
# - Repository > Administration: read-only
|
||||
# - Organization > Members: read-only
|
||||
# - Install App on this repository, setting these variables:
|
||||
# - OWNER_RO_APP_ID (variable)
|
||||
# - OWNER_RO_APP_PRIVATE_KEY (secret)
|
||||
# - For requesting code owners:
|
||||
# - 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)
|
||||
#
|
||||
# This split is done because checking code owners requires handling untrusted PR input,
|
||||
# while requesting code owners requires PR write access, and those shouldn't be mixed.
|
||||
#
|
||||
# Note that the latter is also used for ./eval.yml requesting reviewers.
|
||||
|
||||
name: Codeowners v2
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- .github/workflows/codeowners-v2.yml
|
||||
pull_request_target:
|
||||
types: [opened, ready_for_review, synchronize, reopened]
|
||||
|
||||
concurrency:
|
||||
group: codeowners-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions: {}
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
env:
|
||||
OWNERS_FILE: ci/OWNERS
|
||||
# Don't do anything on draft PRs
|
||||
DRY_MODE: ${{ github.event.pull_request.draft && '1' || '' }}
|
||||
|
||||
jobs:
|
||||
# Check that code owners is valid
|
||||
check:
|
||||
name: Check
|
||||
runs-on: ubuntu-24.04-arm
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
sparse-checkout: .github/actions
|
||||
- name: Check if the PR can be merged and checkout the merge and target commits
|
||||
uses: ./.github/actions/get-merge-commit
|
||||
with:
|
||||
merged-as-untrusted: true
|
||||
target-as-trusted: true
|
||||
|
||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
|
||||
name: nixpkgs-ci
|
||||
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
|
||||
|
||||
- name: Build codeowners validator
|
||||
run: nix-build trusted/ci -A codeownersValidator
|
||||
|
||||
- uses: actions/create-github-app-token@0f859bf9e69e887678d5bbfbee594437cb440ffe # v2.1.0
|
||||
if: github.event_name == 'pull_request_target' && vars.OWNER_RO_APP_ID
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.OWNER_RO_APP_ID }}
|
||||
private-key: ${{ secrets.OWNER_RO_APP_PRIVATE_KEY }}
|
||||
permission-administration: read
|
||||
permission-members: read
|
||||
|
||||
- name: Log current API rate limits
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
- name: Validate codeowners
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
OWNERS_FILE: untrusted/${{ env.OWNERS_FILE }}
|
||||
GITHUB_ACCESS_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
REPOSITORY_PATH: untrusted
|
||||
OWNER_CHECKER_REPOSITORY: ${{ github.repository }}
|
||||
# Set this to "notowned,avoid-shadowing" to check that all files are owned by somebody
|
||||
EXPERIMENTAL_CHECKS: "avoid-shadowing"
|
||||
run: result/bin/codeowners-validator
|
||||
|
||||
- name: Log current API rate limits
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
# Request reviews from code owners
|
||||
request:
|
||||
name: Request
|
||||
runs-on: ubuntu-24.04-arm
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
|
||||
|
||||
# Important: Because we use pull_request_target, this checks out the base branch of the PR, not the PR head.
|
||||
# This is intentional, because we need to request the review of owners as declared in the base branch.
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
path: trusted
|
||||
|
||||
- name: Build review request package
|
||||
run: nix-build trusted/ci -A requestReviews
|
||||
|
||||
- uses: actions/create-github-app-token@0f859bf9e69e887678d5bbfbee594437cb440ffe # v2.1.0
|
||||
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
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
|
||||
- name: Request reviews
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
run: result/bin/request-code-owner-reviews.sh ${{ github.repository }} ${{ github.event.number }} "$OWNERS_FILE"
|
||||
|
||||
- name: Log current API rate limits
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
run: gh api /rate_limit | jq
|
||||
+19
-11
@@ -16,6 +16,8 @@ on:
|
||||
default: false
|
||||
type: boolean
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN:
|
||||
required: true
|
||||
OWNER_APP_PRIVATE_KEY:
|
||||
required: false
|
||||
|
||||
@@ -88,15 +90,22 @@ jobs:
|
||||
with:
|
||||
sparse-checkout: .github/actions
|
||||
- name: Check out the PR at the test merge commit
|
||||
uses: ./.github/actions/get-merge-commit
|
||||
uses: ./.github/actions/checkout
|
||||
with:
|
||||
mergedSha: ${{ inputs.mergedSha }}
|
||||
merged-as-untrusted: true
|
||||
pinnedFrom: untrusted
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
pinned-from: untrusted
|
||||
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
pushFilter: '(-source|-single-chunk)$'
|
||||
|
||||
- name: Evaluate the ${{ matrix.system }} output paths for all derivation attributes
|
||||
env:
|
||||
MATRIX_SYSTEM: ${{ matrix.system }}
|
||||
@@ -206,11 +215,10 @@ jobs:
|
||||
with:
|
||||
sparse-checkout: .github/actions
|
||||
- name: Check out the PR at the target commit
|
||||
uses: ./.github/actions/get-merge-commit
|
||||
uses: ./.github/actions/checkout
|
||||
with:
|
||||
targetSha: ${{ inputs.targetSha }}
|
||||
target-as-trusted: true
|
||||
pinnedFrom: trusted
|
||||
target-as-trusted-at: ${{ inputs.targetSha }}
|
||||
pinned-from: trusted
|
||||
|
||||
- name: Download output paths and eval stats for all systems
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
@@ -375,10 +383,10 @@ jobs:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
sparse-checkout: .github/actions
|
||||
- name: Check if the PR can be merged and checkout the merge commit
|
||||
uses: ./.github/actions/get-merge-commit
|
||||
- name: Checkout the merge commit
|
||||
uses: ./.github/actions/checkout
|
||||
with:
|
||||
merged-as-untrusted: true
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
|
||||
|
||||
+36
-17
@@ -9,6 +9,9 @@ on:
|
||||
targetSha:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN:
|
||||
required: true
|
||||
|
||||
permissions: {}
|
||||
|
||||
@@ -24,15 +27,18 @@ jobs:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
sparse-checkout: .github/actions
|
||||
- name: Check if the PR can be merged and checkout the merge commit
|
||||
uses: ./.github/actions/get-merge-commit
|
||||
- name: Checkout the merge commit
|
||||
uses: ./.github/actions/checkout
|
||||
with:
|
||||
mergedSha: ${{ inputs.mergedSha }}
|
||||
merged-as-untrusted: true
|
||||
pinnedFrom: untrusted
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
pinned-from: untrusted
|
||||
|
||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
|
||||
|
||||
# TODO: Figure out how to best enable caching for the treefmt job. Cachix won't work well,
|
||||
# because the cache would be invalidated on every commit - treefmt checks every file.
|
||||
# Maybe we can cache treefmt's eval-cache somehow.
|
||||
|
||||
- name: Check that files are formatted
|
||||
run: |
|
||||
# Note that it's fine to run this on untrusted code because:
|
||||
@@ -56,15 +62,22 @@ jobs:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
sparse-checkout: .github/actions
|
||||
- name: Check if the PR can be merged and checkout the merge commit
|
||||
uses: ./.github/actions/get-merge-commit
|
||||
- name: Checkout the merge commit
|
||||
uses: ./.github/actions/checkout
|
||||
with:
|
||||
mergedSha: ${{ inputs.mergedSha }}
|
||||
merged-as-untrusted: true
|
||||
pinnedFrom: untrusted
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
pinned-from: untrusted
|
||||
|
||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
pushFilter: -source$
|
||||
|
||||
- name: Parse all nix files
|
||||
run: |
|
||||
# Tests multiple versions at once, let's make sure all of them run, so keep-going.
|
||||
@@ -77,17 +90,23 @@ jobs:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
sparse-checkout: .github/actions
|
||||
- name: Check if the PR can be merged and checkout merged and target commits
|
||||
uses: ./.github/actions/get-merge-commit
|
||||
- name: Checkout merge and target commits
|
||||
uses: ./.github/actions/checkout
|
||||
with:
|
||||
mergedSha: ${{ inputs.mergedSha }}
|
||||
merged-as-untrusted: true
|
||||
pinnedFrom: untrusted
|
||||
targetSha: ${{ inputs.targetSha }}
|
||||
target-as-trusted: true
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
pinned-from: untrusted
|
||||
target-as-trusted-at: ${{ inputs.targetSha }}
|
||||
|
||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
pushFilter: -source$
|
||||
|
||||
- name: Running nixpkgs-vet
|
||||
env:
|
||||
# Force terminal colors to be enabled. The library that `nixpkgs-vet` uses respects https://bixense.com/clicolors/
|
||||
|
||||
@@ -9,6 +9,8 @@ jobs:
|
||||
lint:
|
||||
name: Lint
|
||||
uses: ./.github/workflows/lint.yml
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
with:
|
||||
mergedSha: ${{ github.event.merge_group.head_sha }}
|
||||
targetSha: ${{ github.event.merge_group.base_sha }}
|
||||
|
||||
+23
-49
@@ -3,7 +3,7 @@ name: PR
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- .github/actions/get-merge-commit/action.yml
|
||||
- .github/actions/checkout/action.yml
|
||||
- .github/workflows/build.yml
|
||||
- .github/workflows/check.yml
|
||||
- .github/workflows/eval.yml
|
||||
@@ -23,61 +23,27 @@ jobs:
|
||||
prepare:
|
||||
runs-on: ubuntu-24.04-arm
|
||||
outputs:
|
||||
baseBranch: ${{ steps.branches.outputs.base }}
|
||||
headBranch: ${{ steps.branches.outputs.head }}
|
||||
mergedSha: ${{ steps.get-merge-commit.outputs.mergedSha }}
|
||||
targetSha: ${{ steps.get-merge-commit.outputs.targetSha }}
|
||||
systems: ${{ steps.systems.outputs.systems }}
|
||||
touched: ${{ steps.files.outputs.touched }}
|
||||
baseBranch: ${{ steps.prepare.outputs.base }}
|
||||
headBranch: ${{ steps.prepare.outputs.head }}
|
||||
mergedSha: ${{ steps.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ steps.prepare.outputs.targetSha }}
|
||||
systems: ${{ steps.prepare.outputs.systems }}
|
||||
touched: ${{ steps.prepare.outputs.touched }}
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
sparse-checkout-cone-mode: true # default, for clarity
|
||||
sparse-checkout: |
|
||||
.github/actions
|
||||
ci/supportedBranches.js
|
||||
ci/supportedSystems.json
|
||||
- name: Check if the PR can be merged and get the test merge commit
|
||||
uses: ./.github/actions/get-merge-commit
|
||||
id: get-merge-commit
|
||||
|
||||
- name: Load supported systems
|
||||
id: systems
|
||||
run: |
|
||||
echo "systems=$(jq -c <ci/supportedSystems.json)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Determine branch type
|
||||
id: branches
|
||||
ci/github-script
|
||||
- id: prepare
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||
with:
|
||||
script: |
|
||||
const { classify } = require('./ci/supportedBranches.js')
|
||||
const { base, head } = context.payload.pull_request
|
||||
|
||||
const baseClassification = classify(base.ref)
|
||||
core.setOutput('base', baseClassification)
|
||||
core.info('base classification:', baseClassification)
|
||||
|
||||
const headClassification =
|
||||
(base.repo.full_name == head.repo.full_name) ?
|
||||
classify(head.ref) :
|
||||
// PRs from forks are always considered WIP.
|
||||
{ type: ['wip'] }
|
||||
core.setOutput('head', headClassification)
|
||||
core.info('head classification:', headClassification)
|
||||
|
||||
- name: Determine changed files
|
||||
id: files
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||
with:
|
||||
script: |
|
||||
const files = (await github.paginate(github.rest.pulls.listFiles, {
|
||||
...context.repo,
|
||||
pull_number: context.payload.pull_request.number,
|
||||
per_page: 100,
|
||||
})).map(file => file.filename)
|
||||
|
||||
if (files.includes('ci/pinned.json')) core.setOutput('touched', ['pinned'])
|
||||
else core.setOutput('touched', [])
|
||||
require('./ci/github-script/prepare.js')({
|
||||
github,
|
||||
context,
|
||||
core,
|
||||
})
|
||||
|
||||
check:
|
||||
name: Check
|
||||
@@ -86,14 +52,21 @@ jobs:
|
||||
permissions:
|
||||
# cherry-picks
|
||||
pull-requests: write
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
OWNER_RO_APP_PRIVATE_KEY: ${{ secrets.OWNER_RO_APP_PRIVATE_KEY }}
|
||||
with:
|
||||
baseBranch: ${{ needs.prepare.outputs.baseBranch }}
|
||||
headBranch: ${{ needs.prepare.outputs.headBranch }}
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
||||
|
||||
lint:
|
||||
name: Lint
|
||||
needs: [prepare]
|
||||
uses: ./.github/workflows/lint.yml
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
with:
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
||||
@@ -106,6 +79,7 @@ jobs:
|
||||
# compare
|
||||
statuses: write
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
OWNER_APP_PRIVATE_KEY: ${{ secrets.OWNER_APP_PRIVATE_KEY }}
|
||||
with:
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
|
||||
@@ -43,6 +43,8 @@ jobs:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
statuses: write
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
with:
|
||||
mergedSha: ${{ github.sha }}
|
||||
systems: ${{ needs.prepare.outputs.systems }}
|
||||
|
||||
@@ -4,9 +4,6 @@
|
||||
name: Reviewers
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- .github/workflows/reviewers.yml
|
||||
pull_request_target:
|
||||
types: [ready_for_review]
|
||||
workflow_call:
|
||||
@@ -41,8 +38,16 @@ jobs:
|
||||
- name: Build the requestReviews derivation
|
||||
run: nix-build trusted/ci -A requestReviews
|
||||
|
||||
# See ./codeowners-v2.yml, reuse the same App because we need the same permissions
|
||||
# Can't use the token received from permissions above, because it can't get enough permissions
|
||||
# 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@0f859bf9e69e887678d5bbfbee594437cb440ffe # v2.1.0
|
||||
if: github.event_name == 'pull_request_target' && vars.OWNER_APP_ID
|
||||
id: app-token
|
||||
@@ -53,6 +58,28 @@ jobs:
|
||||
permission-members: read
|
||||
permission-pull-requests: write
|
||||
|
||||
- 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: Requesting code owner reviews
|
||||
if: steps.app-token.outputs.token
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
REPOSITORY: ${{ github.repository }}
|
||||
NUMBER: ${{ github.event.number }}
|
||||
# Don't do anything on draft PRs
|
||||
DRY_MODE: ${{ github.event.pull_request.draft && '1' || '' }}
|
||||
run: result/bin/request-code-owner-reviews.sh "$REPOSITORY" "$NUMBER" ci/OWNERS
|
||||
|
||||
- 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 }}
|
||||
|
||||
@@ -499,4 +499,4 @@ pkgs/by-name/oc/octodns/ @anthonyroussel
|
||||
pkgs/by-name/te/teleport* @arianvp @justinas @sigma @tomberek @freezeboy @techknowlogick @JuliusFreudenberger
|
||||
|
||||
# Warp-terminal
|
||||
pkgs/by-name/wa/warp-terminal/ @emilytrau @imadnyc @donteatoreo @johnrtitor
|
||||
pkgs/by-name/wa/warp-terminal/ @emilytrau @imadnyc @FlameFlag @johnrtitor
|
||||
|
||||
@@ -42,6 +42,22 @@ let
|
||||
|
||||
programs.actionlint.enable = true;
|
||||
|
||||
programs.biome = {
|
||||
enable = true;
|
||||
settings.formatter = {
|
||||
useEditorconfig = true;
|
||||
};
|
||||
settings.javascript.formatter = {
|
||||
quoteStyle = "single";
|
||||
semicolons = "asNeeded";
|
||||
};
|
||||
settings.json.formatter.enabled = false;
|
||||
};
|
||||
settings.formatter.biome.excludes = [
|
||||
"*.min.js"
|
||||
"pkgs/*"
|
||||
];
|
||||
|
||||
programs.keep-sorted.enable = true;
|
||||
|
||||
# This uses nixfmt underneath,
|
||||
|
||||
+57
-28
@@ -1,7 +1,5 @@
|
||||
module.exports = async function ({ github, context, core, dry }) {
|
||||
module.exports = async ({ github, context, core, dry }) => {
|
||||
const { execFileSync } = require('node:child_process')
|
||||
const { readFile } = require('node:fs/promises')
|
||||
const { join } = require('node:path')
|
||||
const { classify } = require('../supportedBranches.js')
|
||||
const withRateLimit = require('./withRateLimit.js')
|
||||
|
||||
@@ -18,13 +16,13 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
run_id: context.runId,
|
||||
per_page: 100,
|
||||
})
|
||||
).find(({ name }) => name == 'Check / cherry-pick').html_url +
|
||||
).find(({ name }) => name === 'Check / cherry-pick').html_url +
|
||||
'?pr=' +
|
||||
pull_number
|
||||
|
||||
async function extract({ sha, commit }) {
|
||||
const noCherryPick = Array.from(
|
||||
commit.message.matchAll(/^Not-cherry-picked-because: (.*)$/g)
|
||||
commit.message.matchAll(/^Not-cherry-picked-because: (.*)$/g),
|
||||
).at(0)
|
||||
|
||||
if (noCherryPick)
|
||||
@@ -148,8 +146,7 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
|
||||
const fetch = extracted
|
||||
.filter(({ severity }) => !severity)
|
||||
.map(({ sha, original_sha }) => [ sha, original_sha ])
|
||||
.flat()
|
||||
.flatMap(({ sha, original_sha }) => [sha, original_sha])
|
||||
|
||||
if (fetch.length > 0) {
|
||||
// Fetching all commits we need for diff at once is much faster than any other method.
|
||||
@@ -163,7 +160,9 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
])
|
||||
}
|
||||
|
||||
const results = extracted.map(result => result.severity ? result : diff(result))
|
||||
const results = extracted.map((result) =>
|
||||
result.severity ? result : diff(result),
|
||||
)
|
||||
|
||||
// Log all results without truncation, with better highlighting and all whitespace changes to the job log.
|
||||
results.forEach(({ sha, commit, severity, message, colored_diff }) => {
|
||||
@@ -177,7 +176,7 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
|
||||
// Only create step summary below in case of warnings or errors.
|
||||
// Also clean up older reviews, when all checks are good now.
|
||||
if (results.every(({ severity }) => severity == 'info')) {
|
||||
if (results.every(({ severity }) => severity === 'info')) {
|
||||
if (!dry) {
|
||||
await Promise.all(
|
||||
(
|
||||
@@ -186,9 +185,9 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
pull_number,
|
||||
})
|
||||
)
|
||||
.filter((review) => review.user.login == 'github-actions[bot]')
|
||||
.filter((review) => review.user.login === 'github-actions[bot]')
|
||||
.map(async (review) => {
|
||||
if (review.state == 'CHANGES_REQUESTED') {
|
||||
if (review.state === 'CHANGES_REQUESTED') {
|
||||
await github.rest.pulls.dismissReview({
|
||||
...context.repo,
|
||||
pull_number,
|
||||
@@ -214,34 +213,64 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
|
||||
// In the case of "error" severity, we also fail the job.
|
||||
// Those should be considered blocking and not be dismissable via review.
|
||||
if (results.some(({ severity }) => severity == 'error'))
|
||||
if (results.some(({ severity }) => severity === 'error'))
|
||||
process.exitCode = 1
|
||||
|
||||
core.summary.addRaw('This report is automatically generated by the `PR / Check / cherry-pick` CI workflow.', true)
|
||||
core.summary.addRaw(
|
||||
'This report is automatically generated by the `PR / Check / cherry-pick` CI workflow.',
|
||||
true,
|
||||
)
|
||||
core.summary.addEOL()
|
||||
core.summary.addRaw("Some of the commits in this PR require the author's and reviewer's attention.", true)
|
||||
core.summary.addRaw(
|
||||
"Some of the commits in this PR require the author's and reviewer's attention.",
|
||||
true,
|
||||
)
|
||||
core.summary.addEOL()
|
||||
|
||||
if (results.some(({ type }) => type === 'no-commit-hash')) {
|
||||
core.summary.addRaw('Please follow the [backporting guidelines](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#how-to-backport-pull-requests) and cherry-pick with the `-x` flag.', true)
|
||||
core.summary.addRaw('This requires changes to the unstable `master` and `staging` branches first, before backporting them.', true)
|
||||
core.summary.addRaw(
|
||||
'Please follow the [backporting guidelines](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#how-to-backport-pull-requests) and cherry-pick with the `-x` flag.',
|
||||
true,
|
||||
)
|
||||
core.summary.addRaw(
|
||||
'This requires changes to the unstable `master` and `staging` branches first, before backporting them.',
|
||||
true,
|
||||
)
|
||||
core.summary.addEOL()
|
||||
core.summary.addRaw('Occasionally, commits are not cherry-picked at all, for example when updating minor versions of packages which have already advanced to the next major on unstable.', true)
|
||||
core.summary.addRaw('These commits can optionally be marked with a `Not-cherry-picked-because: <reason>` footer.', true)
|
||||
core.summary.addRaw(
|
||||
'Occasionally, commits are not cherry-picked at all, for example when updating minor versions of packages which have already advanced to the next major on unstable.',
|
||||
true,
|
||||
)
|
||||
core.summary.addRaw(
|
||||
'These commits can optionally be marked with a `Not-cherry-picked-because: <reason>` footer.',
|
||||
true,
|
||||
)
|
||||
core.summary.addEOL()
|
||||
}
|
||||
|
||||
if (results.some(({ type }) => type === 'diff')) {
|
||||
core.summary.addRaw('Sometimes it is not possible to cherry-pick exactly the same patch.', true)
|
||||
core.summary.addRaw('This most frequently happens when resolving merge conflicts.', true)
|
||||
core.summary.addRaw('The range-diff will help to review the resolution of conflicts.', true)
|
||||
core.summary.addRaw(
|
||||
'Sometimes it is not possible to cherry-pick exactly the same patch.',
|
||||
true,
|
||||
)
|
||||
core.summary.addRaw(
|
||||
'This most frequently happens when resolving merge conflicts.',
|
||||
true,
|
||||
)
|
||||
core.summary.addRaw(
|
||||
'The range-diff will help to review the resolution of conflicts.',
|
||||
true,
|
||||
)
|
||||
core.summary.addEOL()
|
||||
}
|
||||
|
||||
core.summary.addRaw('If you need to merge this PR despite the warnings, please [dismiss](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review) this review shortly before merging.', true)
|
||||
core.summary.addRaw(
|
||||
'If you need to merge this PR despite the warnings, please [dismiss](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review) this review shortly before merging.',
|
||||
true,
|
||||
)
|
||||
|
||||
results.forEach(({ severity, message, diff }) => {
|
||||
if (severity == 'info') return
|
||||
if (severity === 'info') return
|
||||
|
||||
// The docs for markdown alerts only show examples with markdown blockquote syntax, like this:
|
||||
// > [!WARNING]
|
||||
@@ -256,7 +285,7 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
// Whether this is intended or just an implementation detail is unclear.
|
||||
core.summary.addRaw('<blockquote>')
|
||||
core.summary.addRaw(
|
||||
`\n\n[!${({ important: 'IMPORTANT', warning: 'WARNING', error: 'CAUTION' })[severity]}]`,
|
||||
`\n\n[!${{ important: 'IMPORTANT', warning: 'WARNING', error: 'CAUTION' }[severity]}]`,
|
||||
true,
|
||||
)
|
||||
core.summary.addRaw(`${message}`, true)
|
||||
@@ -305,18 +334,18 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
})
|
||||
).find(
|
||||
(review) =>
|
||||
review.user.login == 'github-actions[bot]' &&
|
||||
review.user.login === 'github-actions[bot]' &&
|
||||
// If a review is still pending, we can just update this instead
|
||||
// of posting a new one.
|
||||
(review.state == 'CHANGES_REQUESTED' ||
|
||||
(review.state === 'CHANGES_REQUESTED' ||
|
||||
// No need to post a new review, if an older one with the exact
|
||||
// same content had already been dismissed.
|
||||
review.body == body),
|
||||
review.body === body),
|
||||
)
|
||||
|
||||
if (dry) {
|
||||
if (pendingReview)
|
||||
core.info('pending review found: ' + pendingReview.html_url)
|
||||
core.info(`pending review found: ${pendingReview.html_url}`)
|
||||
else core.info('no pending review found')
|
||||
} else {
|
||||
// Either of those two requests could fail for very long comments. This can only happen
|
||||
|
||||
+18
-17
@@ -1,4 +1,4 @@
|
||||
module.exports = async function ({ github, context, core, dry }) {
|
||||
module.exports = async ({ github, context, core, dry }) => {
|
||||
const path = require('node:path')
|
||||
const { DefaultArtifactClient } = require('@actions/artifact')
|
||||
const { readFile, writeFile } = require('node:fs/promises')
|
||||
@@ -27,7 +27,7 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
|
||||
const approvals = new Set(
|
||||
reviews
|
||||
.filter((review) => review.state == 'APPROVED')
|
||||
.filter((review) => review.state === 'APPROVED')
|
||||
.map((review) => review.user?.id),
|
||||
)
|
||||
|
||||
@@ -37,7 +37,7 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
// This is intentionally less than the time that Eval takes, so that the label job
|
||||
// running after Eval can indeed label the PR as conflicted if that is the case.
|
||||
const merge_commit_sha_valid =
|
||||
new Date() - new Date(pull_request.created_at) > 3 * 60 * 1000
|
||||
Date.now() - new Date(pull_request.created_at) > 3 * 60 * 1000
|
||||
|
||||
const prLabels = {
|
||||
// We intentionally don't use the mergeable or mergeable_state attributes.
|
||||
@@ -53,8 +53,8 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
// The second pass will then read the result from the first pass and set the label.
|
||||
'2.status: merge conflict':
|
||||
merge_commit_sha_valid && !pull_request.merge_commit_sha,
|
||||
'12.approvals: 1': approvals.size == 1,
|
||||
'12.approvals: 2': approvals.size == 2,
|
||||
'12.approvals: 1': approvals.size === 1,
|
||||
'12.approvals: 2': approvals.size === 2,
|
||||
'12.approvals: 3+': approvals.size >= 3,
|
||||
'12.first-time contribution': [
|
||||
'NONE',
|
||||
@@ -104,8 +104,8 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
// existing reviews, too.
|
||||
'9.needs: reviewer':
|
||||
!pull_request.draft &&
|
||||
pull_request.requested_reviewers.length == 0 &&
|
||||
reviews.length == 0,
|
||||
pull_request.requested_reviewers.length === 0 &&
|
||||
reviews.length === 0,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -125,8 +125,7 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
// called "comparison", yet, will skip the download.
|
||||
const expired =
|
||||
!artifact ||
|
||||
new Date(artifact?.expires_at ?? 0) <
|
||||
new Date(new Date().getTime() + 60 * 1000)
|
||||
new Date(artifact?.expires_at ?? 0) < new Date(Date.now() + 60 * 1000)
|
||||
log('Artifact expires at', artifact?.expires_at ?? '<n/a>')
|
||||
if (!expired) {
|
||||
stats.artifacts++
|
||||
@@ -175,7 +174,7 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
async function handle({ item, stats }) {
|
||||
try {
|
||||
const log = (k, v, skip) => {
|
||||
core.info(`#${item.number} - ${k}: ${v}` + (skip ? ' (skipped)' : ''))
|
||||
core.info(`#${item.number} - ${k}: ${v}${skip ? ' (skipped)' : ''}`)
|
||||
return skip
|
||||
}
|
||||
|
||||
@@ -257,7 +256,7 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
|
||||
// No need for an API request, if all labels are the same.
|
||||
const hasChanges = Object.keys(after).some(
|
||||
(name) => (before[name] ?? false) != after[name],
|
||||
(name) => (before[name] ?? false) !== after[name],
|
||||
)
|
||||
if (log('Has changes', hasChanges, !hasChanges)) return
|
||||
|
||||
@@ -297,13 +296,15 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
// Go back as far as the last successful run of this workflow to make sure
|
||||
// we are not leaving anyone behind on GHA failures.
|
||||
// Defaults to go back 1 hour on the first run.
|
||||
new Date(lastRun?.created_at ?? new Date().getTime() - 1 * 60 * 60 * 1000).getTime(),
|
||||
new Date(
|
||||
lastRun?.created_at ?? Date.now() - 1 * 60 * 60 * 1000,
|
||||
).getTime(),
|
||||
// Go back max. 1 day to prevent hitting all API rate limits immediately,
|
||||
// when GH API returns a wrong workflow by accident.
|
||||
new Date().getTime() - 24 * 60 * 60 * 1000,
|
||||
Date.now() - 24 * 60 * 60 * 1000,
|
||||
),
|
||||
)
|
||||
core.info('cutoff timestamp: ' + cutoff.toISOString())
|
||||
core.info(`cutoff timestamp: ${cutoff.toISOString()}`)
|
||||
|
||||
const updatedItems = await github.paginate(
|
||||
github.rest.search.issuesAndPullRequests,
|
||||
@@ -400,12 +401,12 @@ module.exports = async function ({ github, context, core, dry }) {
|
||||
.concat(updatedItems, allItems.data)
|
||||
.filter(
|
||||
(thisItem, idx, arr) =>
|
||||
idx ==
|
||||
arr.findIndex((firstItem) => firstItem.number == thisItem.number),
|
||||
idx ===
|
||||
arr.findIndex((firstItem) => firstItem.number === thisItem.number),
|
||||
)
|
||||
|
||||
;(await Promise.allSettled(items.map((item) => handle({ item, stats }))))
|
||||
.filter(({ status }) => status == 'rejected')
|
||||
.filter(({ status }) => status === 'rejected')
|
||||
.map(({ reason }) =>
|
||||
core.setFailed(`${reason.message}\n${reason.cause.stack}`),
|
||||
)
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
const { classify } = require('../supportedBranches.js')
|
||||
|
||||
module.exports = async ({ github, context, core }) => {
|
||||
const pull_number = context.payload.pull_request.number
|
||||
|
||||
for (const retryInterval of [5, 10, 20, 40, 80]) {
|
||||
core.info('Checking whether the pull request can be merged...')
|
||||
const prInfo = (
|
||||
await github.rest.pulls.get({
|
||||
...context.repo,
|
||||
pull_number,
|
||||
})
|
||||
).data
|
||||
|
||||
if (prInfo.state !== 'open') throw new Error('PR is not open anymore.')
|
||||
|
||||
if (prInfo.mergeable == null) {
|
||||
core.info(
|
||||
`GitHub is still computing whether this PR can be merged, waiting ${retryInterval} seconds before trying again...`,
|
||||
)
|
||||
await new Promise((resolve) => setTimeout(resolve, retryInterval * 1000))
|
||||
continue
|
||||
}
|
||||
|
||||
const { base, head } = prInfo
|
||||
|
||||
let mergedSha, targetSha
|
||||
|
||||
if (prInfo.mergeable) {
|
||||
core.info('The PR can be merged.')
|
||||
|
||||
mergedSha = prInfo.merge_commit_sha
|
||||
targetSha = (
|
||||
await github.rest.repos.getCommit({
|
||||
...context.repo,
|
||||
ref: prInfo.merge_commit_sha,
|
||||
})
|
||||
).data.parents[0].sha
|
||||
} else {
|
||||
core.warning('The PR has a merge conflict.')
|
||||
|
||||
mergedSha = prInfo.head.sha
|
||||
targetSha = (
|
||||
await github.rest.repos.compareCommitsWithBasehead({
|
||||
...context.repo,
|
||||
basehead: `${base.sha}...${head.sha}`,
|
||||
})
|
||||
).data.merge_base_commit.sha
|
||||
}
|
||||
|
||||
core.info(
|
||||
`Checking the commits:\nmerged: ${mergedSha}\ntarget: ${targetSha}`,
|
||||
)
|
||||
core.setOutput('mergedSha', mergedSha)
|
||||
core.setOutput('targetSha', targetSha)
|
||||
|
||||
core.setOutput('systems', require('../supportedSystems.json'))
|
||||
|
||||
const baseClassification = classify(base.ref)
|
||||
core.setOutput('base', baseClassification)
|
||||
console.log('base classification:', baseClassification)
|
||||
|
||||
const headClassification =
|
||||
base.repo.full_name === head.repo.full_name
|
||||
? classify(head.ref)
|
||||
: // PRs from forks are always considered WIP.
|
||||
{ type: ['wip'] }
|
||||
core.setOutput('head', headClassification)
|
||||
console.log('head classification:', headClassification)
|
||||
|
||||
const files = (
|
||||
await github.paginate(github.rest.pulls.listFiles, {
|
||||
...context.repo,
|
||||
pull_number: context.payload.pull_request.number,
|
||||
per_page: 100,
|
||||
})
|
||||
).map((file) => file.filename)
|
||||
|
||||
if (files.includes('ci/pinned.json')) core.setOutput('touched', ['pinned'])
|
||||
else core.setOutput('touched', [])
|
||||
|
||||
return
|
||||
}
|
||||
throw new Error(
|
||||
"Not retrying anymore. It's likely that GitHub is having internal issues: check https://www.githubstatus.com.",
|
||||
)
|
||||
}
|
||||
@@ -39,6 +39,17 @@ async function run(action, owner, repo, pull_number, dry = true) {
|
||||
})
|
||||
}
|
||||
|
||||
program
|
||||
.command('prepare')
|
||||
.description('Prepare relevant information of a pull request.')
|
||||
.argument('<owner>', 'Owner of the GitHub repository to check (Example: NixOS)')
|
||||
.argument('<repo>', 'Name of the GitHub repository to check (Example: nixpkgs)')
|
||||
.argument('<pr>', 'Number of the Pull Request to check')
|
||||
.action(async (owner, repo, pr) => {
|
||||
const prepare = (await import('./prepare.js')).default
|
||||
run(prepare, owner, repo, pr)
|
||||
})
|
||||
|
||||
program
|
||||
.command('commits')
|
||||
.description('Check commit structure of a pull request.')
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
module.exports = async function ({ github, core }, callback) {
|
||||
module.exports = async ({ github, core }, callback) => {
|
||||
const Bottleneck = require('bottleneck')
|
||||
|
||||
const stats = {
|
||||
@@ -23,7 +23,7 @@ module.exports = async function ({ github, core }, callback) {
|
||||
// Requests to a different host do not count against the rate limit.
|
||||
if (options.url.startsWith('https://github.com')) return request(options)
|
||||
// Requests to the /rate_limit endpoint do not count against the rate limit.
|
||||
if (options.url == '/rate_limit') return request(options)
|
||||
if (options.url === '/rate_limit') return request(options)
|
||||
// Search requests are in a different resource group, which allows 30 requests / minute.
|
||||
// We do less than a handful each run, so not implementing throttling for now.
|
||||
if (options.url.startsWith('/search/')) return request(options)
|
||||
|
||||
+10
-4
@@ -13,9 +13,15 @@ let
|
||||
with lib.fileset;
|
||||
path:
|
||||
toSource {
|
||||
fileset = (gitTracked path);
|
||||
fileset = difference (gitTracked path) (unions [
|
||||
(path + /.github)
|
||||
(path + /ci)
|
||||
]);
|
||||
root = path;
|
||||
};
|
||||
|
||||
filteredBase = filtered base;
|
||||
filteredHead = filtered head;
|
||||
in
|
||||
runCommand "nixpkgs-vet"
|
||||
{
|
||||
@@ -27,11 +33,11 @@ runCommand "nixpkgs-vet"
|
||||
''
|
||||
export NIX_STATE_DIR=$(mktemp -d)
|
||||
|
||||
nixpkgs-vet --base ${filtered base} ${filtered head}
|
||||
nixpkgs-vet --base ${filteredBase} ${filteredHead}
|
||||
|
||||
# TODO: Upstream into nixpkgs-vet, see:
|
||||
# https://github.com/NixOS/nixpkgs-vet/issues/164
|
||||
badFiles=$(find ${filtered head}/pkgs -type f -name '*.nix' -print | xargs grep -l '^[^#]*<nixpkgs/' || true)
|
||||
badFiles=$(find ${filteredHead}/pkgs -type f -name '*.nix' -print | xargs grep -l '^[^#]*<nixpkgs/' || true)
|
||||
if [[ -n $badFiles ]]; then
|
||||
echo "Nixpkgs is not allowed to use <nixpkgs> to refer to itself."
|
||||
echo "The offending files:"
|
||||
@@ -41,7 +47,7 @@ runCommand "nixpkgs-vet"
|
||||
|
||||
# TODO: Upstream into nixpkgs-vet, see:
|
||||
# https://github.com/NixOS/nixpkgs-vet/issues/166
|
||||
conflictingPaths=$(find ${filtered head} | awk '{ print $1 " " tolower($1) }' | sort -k2 | uniq -D -f 1 | cut -d ' ' -f 1)
|
||||
conflictingPaths=$(find ${filteredHead} | awk '{ print $1 " " tolower($1) }' | sort -k2 | uniq -D -f 1 | cut -d ' ' -f 1)
|
||||
if [[ -n $conflictingPaths ]]; then
|
||||
echo "Files in nixpkgs must not vary only by case."
|
||||
echo "The offending paths:"
|
||||
|
||||
@@ -15,14 +15,18 @@ const typeConfig = {
|
||||
}
|
||||
|
||||
function split(branch) {
|
||||
return { ...branch.match(/(?<prefix>.+?)(-(?<version>\d{2}\.\d{2}|unstable)(?:-(?<suffix>.*))?)?$/).groups }
|
||||
return {
|
||||
...branch.match(
|
||||
/(?<prefix>.+?)(-(?<version>\d{2}\.\d{2}|unstable)(?:-(?<suffix>.*))?)?$/,
|
||||
).groups,
|
||||
}
|
||||
}
|
||||
|
||||
function classify(branch) {
|
||||
const { prefix, version } = split(branch)
|
||||
return {
|
||||
stable: (version ?? 'unstable') !== 'unstable',
|
||||
type: typeConfig[prefix] ?? [ 'wip' ]
|
||||
type: typeConfig[prefix] ?? ['wip'],
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-3
@@ -1,3 +1,5 @@
|
||||
document.addEventListener('DOMContentLoaded', function(event) {
|
||||
anchors.add('h1[id]:not(div.note h1, div.warning h1, div.tip h1, div.caution h1, div.important h1), h2[id]:not(div.note h2, div.warning h2, div.tip h2, div.caution h2, div.important h2), h3[id]:not(div.note h3, div.warning h3, div.tip h3, div.caution h3, div.important h3), h4[id]:not(div.note h4, div.warning h4, div.tip h4, div.caution h4, div.important h4), h5[id]:not(div.note h5, div.warning h5, div.tip h5, div.caution h5, div.important h5), h6[id]:not(div.note h6, div.warning h6, div.tip h6, div.caution h6, div.important h6)');
|
||||
});
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
anchors.add(
|
||||
'h1[id]:not(div.note h1, div.warning h1, div.tip h1, div.caution h1, div.important h1), h2[id]:not(div.note h2, div.warning h2, div.tip h2, div.caution h2, div.important h2), h3[id]:not(div.note h3, div.warning h3, div.tip h3, div.caution h3, div.important h3), h4[id]:not(div.note h4, div.warning h4, div.tip h4, div.caution h4, div.important h4), h5[id]:not(div.note h5, div.warning h5, div.tip h5, div.caution h5, div.important h5), h6[id]:not(div.note h6, div.warning h6, div.tip h6, div.caution h6, div.important h6)',
|
||||
)
|
||||
})
|
||||
|
||||
+205
-206
@@ -1,193 +1,193 @@
|
||||
html {
|
||||
line-height: 1.15;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
line-height: 1.15;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.book,
|
||||
.appendix {
|
||||
margin: auto;
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
.book,
|
||||
.appendix {
|
||||
max-width: 46rem;
|
||||
}
|
||||
.book,
|
||||
.appendix {
|
||||
max-width: 46rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 992px) {
|
||||
.book,
|
||||
.appendix {
|
||||
max-width: 60rem;
|
||||
}
|
||||
.book,
|
||||
.appendix {
|
||||
max-width: 60rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1200px) {
|
||||
.book,
|
||||
.appendix {
|
||||
max-width: 73rem;
|
||||
}
|
||||
.book,
|
||||
.appendix {
|
||||
max-width: 73rem;
|
||||
}
|
||||
}
|
||||
|
||||
.book .list-of-examples {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
overflow: visible;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
font-family: monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
font-family: monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button;
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
font-size: 100%;
|
||||
line-height: 1.77777778;
|
||||
font-size: 100%;
|
||||
line-height: 1.77777778;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 4000px) {
|
||||
html {
|
||||
background: #000;
|
||||
}
|
||||
html {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
html body {
|
||||
margin: auto;
|
||||
max-width: 250rem;
|
||||
}
|
||||
html body {
|
||||
margin: auto;
|
||||
max-width: 250rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 320px) {
|
||||
html {
|
||||
font-size: calc(16 / 320 * 100vw);
|
||||
}
|
||||
html {
|
||||
font-size: calc(16 / 320 * 100vw);
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
font-size: 1rem;
|
||||
font-family: "Roboto", sans-serif;
|
||||
font-weight: 300;
|
||||
color: var(--main-text-color);
|
||||
background-color: var(--background);
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-size: 1rem;
|
||||
font-family: "Roboto", sans-serif;
|
||||
font-weight: 300;
|
||||
color: var(--main-text-color);
|
||||
background-color: var(--background);
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 767.9px) {
|
||||
body {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
body {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid;
|
||||
color: var(--link-color);
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid;
|
||||
color: var(--link-color);
|
||||
}
|
||||
|
||||
ul {
|
||||
padding: 0;
|
||||
margin-top: 0;
|
||||
margin-right: 0;
|
||||
margin-bottom: 1rem;
|
||||
margin-left: 1rem;
|
||||
padding: 0;
|
||||
margin-top: 0;
|
||||
margin-right: 0;
|
||||
margin-bottom: 1rem;
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
thead th {
|
||||
text-align: left;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
font-size: 200%;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--heading-color);
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
font-size: 200%;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
font-size: 170%;
|
||||
margin-bottom: 0.625rem;
|
||||
color: var(--heading-color);
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
font-size: 170%;
|
||||
margin-bottom: 0.625rem;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
|
||||
h2:not(:first-child) {
|
||||
margin-top: 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 150%;
|
||||
color: var(--heading-color);
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 150%;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
|
||||
.note h3,
|
||||
@@ -195,73 +195,73 @@ h3 {
|
||||
.warning h3,
|
||||
.caution h3,
|
||||
.important h3 {
|
||||
font-size: 120%;
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 140%;
|
||||
color: var(--heading-color);
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 140%;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 130%;
|
||||
color: var(--small-heading-color);
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 130%;
|
||||
color: var(--small-heading-color);
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 120%;
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: bold;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
dt > *:first-child,
|
||||
dd > *:first-child {
|
||||
margin-top: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
dt > *:last-child,
|
||||
dd > *:last-child {
|
||||
margin-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
pre,
|
||||
code {
|
||||
font-family: monospace;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
code {
|
||||
color: #ff8657;
|
||||
background: #f4f4f4;
|
||||
display: inline-block;
|
||||
padding: 0 0.5rem;
|
||||
border: 1px solid #d8d8d8;
|
||||
border-radius: 0.5rem;
|
||||
line-height: 1.57777778;
|
||||
color: #ff8657;
|
||||
background: #f4f4f4;
|
||||
display: inline-block;
|
||||
padding: 0 0.5rem;
|
||||
border: 1px solid #d8d8d8;
|
||||
border-radius: 0.5rem;
|
||||
line-height: 1.57777778;
|
||||
}
|
||||
|
||||
div.book .programlisting,
|
||||
div.appendix .programlisting {
|
||||
border-radius: 0.5rem;
|
||||
padding: 1rem;
|
||||
overflow: auto;
|
||||
background: var(--codeblock-background);
|
||||
color: var(--codeblock-text-color);
|
||||
border-radius: 0.5rem;
|
||||
padding: 1rem;
|
||||
overflow: auto;
|
||||
background: var(--codeblock-background);
|
||||
color: var(--codeblock-text-color);
|
||||
}
|
||||
|
||||
div.book .note,
|
||||
@@ -274,11 +274,11 @@ div.appendix .tip,
|
||||
div.appendix .warning,
|
||||
div.appendix .caution,
|
||||
div.appendix .important {
|
||||
margin-bottom: 1rem;
|
||||
border-radius: 0.5rem;
|
||||
padding: 1.5rem;
|
||||
overflow: auto;
|
||||
background: #f4f4f4;
|
||||
margin-bottom: 1rem;
|
||||
border-radius: 0.5rem;
|
||||
padding: 1.5rem;
|
||||
overflow: auto;
|
||||
background: #f4f4f4;
|
||||
}
|
||||
|
||||
div.book .note > .title,
|
||||
@@ -291,11 +291,10 @@ div.appendix .tip > .title,
|
||||
div.appendix .warning > .title,
|
||||
div.appendix .caution > .title,
|
||||
div.appendix .important > .title {
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
color: inherit;
|
||||
margin-bottom: 0;
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
color: inherit;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.book .note > :first-child,
|
||||
@@ -308,7 +307,7 @@ div.appendix .tip > :first-child,
|
||||
div.appendix .warning > :first-child,
|
||||
div.appendix .caution > :first-child,
|
||||
div.appendix .important > :first-child {
|
||||
margin-top: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
div.book .note > :last-child,
|
||||
@@ -321,122 +320,122 @@ div.appendix .tip > :last-child,
|
||||
div.appendix .warning > :last-child,
|
||||
div.appendix .caution > :last-child,
|
||||
div.appendix .important > :last-child {
|
||||
margin-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.book .note,
|
||||
div.book .tip,
|
||||
div.appendix .note,
|
||||
div.appendix .tip {
|
||||
color: var(--note-text-color);
|
||||
background: var(--note-background);
|
||||
color: var(--note-text-color);
|
||||
background: var(--note-background);
|
||||
}
|
||||
|
||||
div.book .warning,
|
||||
div.book .caution,
|
||||
div.appendix .warning,
|
||||
div.appendix .caution {
|
||||
color: var(--warning-text-color);
|
||||
background-color: var(--warning-background);
|
||||
color: var(--warning-text-color);
|
||||
background-color: var(--warning-background);
|
||||
}
|
||||
|
||||
div.book .section,
|
||||
div.appendix .section {
|
||||
margin-top: 2em;
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
div.book div.example,
|
||||
div.appendix div.example {
|
||||
margin-top: 1.5em;
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
|
||||
div.book div.example details,
|
||||
div.appendix div.example details {
|
||||
padding: 5px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
div.book div.example details[open],
|
||||
div.appendix div.example details[open] {
|
||||
border: 1px solid #aaa;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #aaa;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
div.book div.example details > summary,
|
||||
div.appendix div.example details > summary {
|
||||
cursor: pointer;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.book br.example-break,
|
||||
div.appendix br.example-break {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.book div.footnotes > hr,
|
||||
div.appendix div.footnotes > hr {
|
||||
border-color: #d8d8d8;
|
||||
border-color: #d8d8d8;
|
||||
}
|
||||
|
||||
div.book div.footnotes > br,
|
||||
div.appendix div.footnotes > br {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.book dt,
|
||||
div.appendix dt {
|
||||
margin-top: 1em;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
div.book .toc dt,
|
||||
div.appendix .toc dt {
|
||||
margin-top: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
div.book .list-of-examples dt,
|
||||
div.appendix .list-of-examples dt {
|
||||
margin-top: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
div.book code,
|
||||
div.appendix code {
|
||||
padding: 0;
|
||||
border: 0;
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
font-size: 100%;
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
hyphens: none;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
font-size: 100%;
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
div.book div.toc,
|
||||
div.appendix div.toc {
|
||||
margin-bottom: 3em;
|
||||
border-bottom: 0.0625rem solid #d8d8d8;
|
||||
margin-bottom: 3em;
|
||||
border-bottom: 0.0625rem solid #d8d8d8;
|
||||
}
|
||||
|
||||
div.book div.toc dd,
|
||||
div.appendix div.toc dd {
|
||||
margin-left: 2em;
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
div.book span.command,
|
||||
div.appendix span.command {
|
||||
font-family: monospace;
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
hyphens: none;
|
||||
font-family: monospace;
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
div.book .informaltable th,
|
||||
div.book .informaltable td,
|
||||
div.appendix .informaltable th,
|
||||
div.appendix .informaltable td {
|
||||
padding: 0.5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
div.book .variablelist .term,
|
||||
div.appendix .variablelist .term {
|
||||
font-weight: 500;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -444,50 +443,50 @@ div.appendix .variablelist .term {
|
||||
For more details, see https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html#stylable-scopes
|
||||
*/
|
||||
.hljs-meta.prompt_ {
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
:root {
|
||||
--background: #fff;
|
||||
--main-text-color: #000;
|
||||
--link-color: #405d99;
|
||||
--heading-color: #6586c8;
|
||||
--small-heading-color: #6a6a6a;
|
||||
--note-text-color: #5277c3;
|
||||
--note-background: #f2f8fd;
|
||||
--warning-text-color: #cc3900;
|
||||
--warning-background: #fff5e1;
|
||||
--codeblock-background: #f2f8fd;
|
||||
--codeblock-text-color: #000;
|
||||
--background: #fff;
|
||||
--main-text-color: #000;
|
||||
--link-color: #405d99;
|
||||
--heading-color: #6586c8;
|
||||
--small-heading-color: #6a6a6a;
|
||||
--note-text-color: #5277c3;
|
||||
--note-background: #f2f8fd;
|
||||
--warning-text-color: #cc3900;
|
||||
--warning-background: #fff5e1;
|
||||
--codeblock-background: #f2f8fd;
|
||||
--codeblock-text-color: #000;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--background: #242424;
|
||||
--main-text-color: #fff;
|
||||
--link-color: #6586c8;
|
||||
--small-heading-color: #fff;
|
||||
--note-background: none;
|
||||
--warning-background: none;
|
||||
--codeblock-background: #393939;
|
||||
--codeblock-text-color: #fff;
|
||||
}
|
||||
:root {
|
||||
--background: #242424;
|
||||
--main-text-color: #fff;
|
||||
--link-color: #6586c8;
|
||||
--small-heading-color: #fff;
|
||||
--note-background: none;
|
||||
--warning-background: none;
|
||||
--codeblock-background: #393939;
|
||||
--codeblock-text-color: #fff;
|
||||
}
|
||||
|
||||
div.book .note,
|
||||
div.book .tip,
|
||||
div.appendix .note,
|
||||
div.appendix .tip,
|
||||
div.book .warning,
|
||||
div.book .caution,
|
||||
div.appendix .warning,
|
||||
div.appendix .caution {
|
||||
border: 2px solid;
|
||||
font-weight: 400;
|
||||
}
|
||||
div.book .note,
|
||||
div.book .tip,
|
||||
div.appendix .note,
|
||||
div.appendix .tip,
|
||||
div.book .warning,
|
||||
div.book .caution,
|
||||
div.appendix .warning,
|
||||
div.appendix .caution {
|
||||
border: 2px solid;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Roboto;
|
||||
src: url(Roboto.ttf);
|
||||
font-family: Roboto;
|
||||
src: url(Roboto.ttf);
|
||||
}
|
||||
|
||||
@@ -6673,12 +6673,6 @@
|
||||
name = "Donovan Glover";
|
||||
keys = [ { fingerprint = "EE7D 158E F9E7 660E 0C33 86B2 8FC5 F7D9 0A5D 8F4D"; } ];
|
||||
};
|
||||
donteatoreo = {
|
||||
name = "DontEatOreo";
|
||||
github = "DontEatOreo";
|
||||
githubId = 57304299;
|
||||
matrix = "@donteatoreo:matrix.org";
|
||||
};
|
||||
dopplerian = {
|
||||
name = "Dopplerian";
|
||||
github = "Dopplerian";
|
||||
@@ -6782,6 +6776,13 @@
|
||||
name = "Nico Jensch";
|
||||
keys = [ { fingerprint = "D245 D484 F357 8CB1 7FD6 DA6B 67DB 29BF F3C9 6757"; } ];
|
||||
};
|
||||
drafolin = {
|
||||
email = "derg@drafolin.ch";
|
||||
github = "drafolin";
|
||||
githubId = 66629792;
|
||||
name = "Dråfølin";
|
||||
keys = [ { fingerprint = "CAE2 9E73 0691 0AE9 1BD1 3D72 91A9 5557 C50B 4D3E"; } ];
|
||||
};
|
||||
dragonginger = {
|
||||
email = "dragonginger10@gmail.com";
|
||||
github = "dragonginger10";
|
||||
@@ -8453,6 +8454,12 @@
|
||||
name = "Sebastian Neubauer";
|
||||
keys = [ { fingerprint = "2F93 661D AC17 EA98 A104 F780 ECC7 55EE 583C 1672"; } ];
|
||||
};
|
||||
FlameFlag = {
|
||||
name = "FlameFlag";
|
||||
github = "FlameFlag";
|
||||
githubId = 57304299;
|
||||
matrix = "@donteatoreo:matrix.org";
|
||||
};
|
||||
Flameopathic = {
|
||||
email = "flameopathic@gmail.com";
|
||||
github = "Flameopathic";
|
||||
|
||||
@@ -369,6 +369,11 @@ let
|
||||
kick other. Useful in jitsi-meet to kick ghosts.
|
||||
'';
|
||||
};
|
||||
moderation = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Allow rooms to be moderated";
|
||||
};
|
||||
|
||||
# Extra parameters. Defaulting to prosody default values.
|
||||
# Adding them explicitly to make them visible from the options
|
||||
@@ -567,7 +572,7 @@ let
|
||||
|
||||
${lib.concatMapStrings (muc: ''
|
||||
Component ${toLua muc.domain} "muc"
|
||||
modules_enabled = {${optionalString cfg.modules.mam ''"muc_mam",''}${optionalString muc.allowners_muc ''"muc_allowners",''} }
|
||||
modules_enabled = {${optionalString cfg.modules.mam ''"muc_mam",''}${optionalString muc.allowners_muc ''"muc_allowners",''}${optionalString muc.moderation ''"muc_moderation",''} }
|
||||
name = ${toLua muc.name}
|
||||
restrict_room_creation = ${toLua muc.restrictRoomCreation}
|
||||
max_history_messages = ${toLua muc.maxHistoryMessages}
|
||||
|
||||
@@ -10,12 +10,18 @@ let
|
||||
mkEnableOption
|
||||
mkPackageOption
|
||||
mkOption
|
||||
literalExpression
|
||||
hasAttr
|
||||
toList
|
||||
length
|
||||
head
|
||||
tail
|
||||
concatStringsSep
|
||||
optionalString
|
||||
optionalAttrs
|
||||
isDerivation
|
||||
recursiveUpdate
|
||||
getExe
|
||||
literalExpression
|
||||
types
|
||||
maintainers
|
||||
;
|
||||
@@ -28,38 +34,27 @@ let
|
||||
# Since the json config attribute type "configFormat.type" doesn't allow specifying types for
|
||||
# individual attributes, we have to type check manually.
|
||||
|
||||
# The application option must be either a package or a list with package as the first element.
|
||||
# The application option should be a list with package as the first element, though a single package is also valid.
|
||||
# Note that this module depends on the package containing the meta.mainProgram attribute.
|
||||
|
||||
# Checking if an application is provided
|
||||
applicationAttrExists = builtins.hasAttr "application" cfg.config.json;
|
||||
applicationListNotEmpty = (
|
||||
if builtins.isList cfg.config.json.application then
|
||||
(builtins.length cfg.config.json.application) != 0
|
||||
else
|
||||
true
|
||||
);
|
||||
# Check if an application is provided
|
||||
applicationAttrExists = hasAttr "application" cfg.config.json;
|
||||
applicationList = toList cfg.config.json.application;
|
||||
applicationListNotEmpty = length applicationList != 0;
|
||||
applicationCheck = applicationAttrExists && applicationListNotEmpty;
|
||||
|
||||
# Manage packages and their exe paths
|
||||
applicationAttr = (
|
||||
if builtins.isList cfg.config.json.application then
|
||||
builtins.head cfg.config.json.application
|
||||
else
|
||||
cfg.config.json.application
|
||||
);
|
||||
applicationAttr = head applicationList;
|
||||
applicationPackage = mkIf applicationCheck applicationAttr;
|
||||
applicationPackageExe = getExe applicationAttr;
|
||||
serverPackageExe = getExe cfg.package;
|
||||
|
||||
# Managing strings
|
||||
applicationStrings = builtins.tail cfg.config.json.application;
|
||||
applicationConcat = (
|
||||
if builtins.isList cfg.config.json.application then
|
||||
builtins.concatStringsSep " " ([ applicationPackageExe ] ++ applicationStrings)
|
||||
else
|
||||
applicationPackageExe
|
||||
serverPackageExe = (
|
||||
if cfg.highPriority then "${config.security.wrapperDir}/wivrn-server" else getExe cfg.package
|
||||
);
|
||||
|
||||
# Manage strings
|
||||
applicationStrings = tail applicationList;
|
||||
applicationConcat = concatStringsSep " " ([ applicationPackageExe ] ++ applicationStrings);
|
||||
|
||||
# Manage config file
|
||||
applicationUpdate = recursiveUpdate cfg.config.json (
|
||||
optionalAttrs applicationCheck { application = applicationConcat; }
|
||||
@@ -68,7 +63,7 @@ let
|
||||
enabledConfig = optionalString cfg.config.enable "-f ${configFile}";
|
||||
|
||||
# Manage server executables and flags
|
||||
serverExec = builtins.concatStringsSep " " (
|
||||
serverExec = concatStringsSep " " (
|
||||
[
|
||||
serverPackageExe
|
||||
"--systemd"
|
||||
@@ -76,14 +71,6 @@ let
|
||||
]
|
||||
++ cfg.extraServerFlags
|
||||
);
|
||||
applicationExec = builtins.concatStringsSep " " (
|
||||
[
|
||||
serverPackageExe
|
||||
"--application"
|
||||
enabledConfig
|
||||
]
|
||||
++ cfg.extraApplicationFlags
|
||||
);
|
||||
in
|
||||
{
|
||||
options = {
|
||||
@@ -95,7 +82,7 @@ in
|
||||
openFirewall = mkEnableOption "the default ports in the firewall for the WiVRn server";
|
||||
|
||||
defaultRuntime = mkEnableOption ''
|
||||
WiVRn Monado as the default OpenXR runtime on the system.
|
||||
WiVRn as the default OpenXR runtime on the system.
|
||||
The config can be found at `/etc/xdg/openxr/1/active_runtime.json`.
|
||||
|
||||
Note that applications can bypass this option by setting an active
|
||||
@@ -104,34 +91,29 @@ in
|
||||
|
||||
autoStart = mkEnableOption "starting the service by default";
|
||||
|
||||
highPriority = mkEnableOption "high priority capability for asynchronous reprojection";
|
||||
|
||||
monadoEnvironment = mkOption {
|
||||
type = types.attrs;
|
||||
description = "Environment variables to be passed to the Monado environment.";
|
||||
default = {
|
||||
XRT_COMPOSITOR_LOG = "debug";
|
||||
XRT_PRINT_OPTIONS = "on";
|
||||
IPC_EXIT_ON_DISCONNECT = "off";
|
||||
};
|
||||
default = { };
|
||||
};
|
||||
|
||||
extraServerFlags = mkOption {
|
||||
type = types.listOf types.str;
|
||||
description = "Flags to add to the wivrn service.";
|
||||
default = [ ];
|
||||
example = ''[ "--no-publish-service" ]'';
|
||||
example = literalExpression ''[ "--no-publish-service" ]'';
|
||||
};
|
||||
|
||||
extraApplicationFlags = mkOption {
|
||||
type = types.listOf types.str;
|
||||
description = "Flags to add to the wivrn-application service. This is NOT the WiVRn startup application.";
|
||||
default = [ ];
|
||||
};
|
||||
steam = {
|
||||
importOXRRuntimes = mkEnableOption ''
|
||||
Sets `PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES` system-wide to allow Steam to automatically discover the WiVRn server.
|
||||
|
||||
extraPackages = mkOption {
|
||||
type = types.listOf types.package;
|
||||
description = "Packages to add to the wivrn-application service $PATH.";
|
||||
default = [ ];
|
||||
example = literalExpression "[ pkgs.bash pkgs.procps ]";
|
||||
Note that you may have to logout for this variable to be visible
|
||||
'';
|
||||
|
||||
package = mkPackageOption pkgs "steam" { };
|
||||
};
|
||||
|
||||
config = {
|
||||
@@ -139,12 +121,12 @@ in
|
||||
json = mkOption {
|
||||
type = configFormat.type;
|
||||
description = ''
|
||||
Configuration for WiVRn. The attributes are serialized to JSON in config.json. If a config or certain attributes are not provided, the server will default to stock values.
|
||||
Configuration for WiVRn. The attributes are serialized to JSON in config.json. The server will fallback to default values for any missing attributes.
|
||||
|
||||
Note that the application option must be either a package or a
|
||||
list with package as the first element.
|
||||
Like upstream, the application option is a list including the application and it's flags. In the case of the NixOS module however, the first element of the list must be a package. The module will assert otherwise.
|
||||
The application can be set to a single package because it gets passed to lib.toList, though this will not allow for flags to be passed.
|
||||
|
||||
See <https://github.com/WiVRn/WiVRn/blob/master/docs/configuration.md>
|
||||
See https://github.com/WiVRn/WiVRn/blob/master/docs/configuration.md
|
||||
'';
|
||||
default = { };
|
||||
example = literalExpression ''
|
||||
@@ -177,51 +159,59 @@ in
|
||||
}
|
||||
];
|
||||
|
||||
security.wrappers."wivrn-server" = mkIf cfg.highPriority {
|
||||
setuid = false;
|
||||
owner = "root";
|
||||
group = "root";
|
||||
capabilities = "cap_sys_nice+eip";
|
||||
source = getExe cfg.package;
|
||||
};
|
||||
|
||||
systemd.user = {
|
||||
services = {
|
||||
# The WiVRn server runs in a hardened service and starts the application in a different service
|
||||
wivrn = {
|
||||
description = "WiVRn XR runtime service";
|
||||
environment = {
|
||||
environment = recursiveUpdate {
|
||||
# Default options
|
||||
# https://gitlab.freedesktop.org/monado/monado/-/blob/598080453545c6bf313829e5780ffb7dde9b79dc/src/xrt/targets/service/monado.in.service#L12
|
||||
XRT_COMPOSITOR_LOG = "debug";
|
||||
XRT_PRINT_OPTIONS = "on";
|
||||
IPC_EXIT_ON_DISCONNECT = "off";
|
||||
}
|
||||
// cfg.monadoEnvironment;
|
||||
serviceConfig = {
|
||||
ExecStart = serverExec;
|
||||
# Hardening options
|
||||
CapabilityBoundingSet = [ "CAP_SYS_NICE" ];
|
||||
AmbientCapabilities = [ "CAP_SYS_NICE" ];
|
||||
LockPersonality = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateTmp = true;
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
ProtectSystem = "strict";
|
||||
RemoveIPC = true;
|
||||
RestrictNamespaces = true;
|
||||
RestrictSUIDSGID = true;
|
||||
};
|
||||
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES = mkIf cfg.steam.importOXRRuntimes "1";
|
||||
} cfg.monadoEnvironment;
|
||||
serviceConfig = (
|
||||
if cfg.highPriority then
|
||||
{
|
||||
ExecStart = serverExec;
|
||||
}
|
||||
# Hardening options break high-priority
|
||||
else
|
||||
{
|
||||
ExecStart = serverExec;
|
||||
# Hardening options
|
||||
CapabilityBoundingSet = [ "CAP_SYS_NICE" ];
|
||||
AmbientCapabilities = [ "CAP_SYS_NICE" ];
|
||||
LockPersonality = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateTmp = true;
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
ProtectSystem = "strict";
|
||||
RemoveIPC = true;
|
||||
RestrictNamespaces = true;
|
||||
RestrictSUIDSGID = true;
|
||||
}
|
||||
);
|
||||
path = [ cfg.steam.package ];
|
||||
wantedBy = mkIf cfg.autoStart [ "default.target" ];
|
||||
restartTriggers = [ cfg.package ];
|
||||
};
|
||||
wivrn-application = mkIf applicationCheck {
|
||||
description = "WiVRn application service";
|
||||
requires = [ "wivrn.service" ];
|
||||
serviceConfig = {
|
||||
ExecStart = applicationExec;
|
||||
Restart = "on-failure";
|
||||
RestartSec = 0;
|
||||
PrivateTmp = true;
|
||||
};
|
||||
path = [ applicationPackage ] ++ cfg.extraPackages;
|
||||
restartTriggers = [
|
||||
cfg.package
|
||||
cfg.steam.package
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -247,6 +237,9 @@ in
|
||||
cfg.package
|
||||
applicationPackage
|
||||
];
|
||||
sessionVariables = mkIf cfg.steam.importOXRRuntimes {
|
||||
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES = "1";
|
||||
};
|
||||
pathsToLink = [ "/share/openxr" ];
|
||||
etc."xdg/openxr/1/active_runtime.json" = mkIf cfg.defaultRuntime {
|
||||
source = "${cfg.package}/share/openxr/1/openxr_wivrn.json";
|
||||
|
||||
@@ -70,7 +70,7 @@ let
|
||||
postPatch = ''
|
||||
# Patch index.php file to load additional config file
|
||||
substituteInPlace index.php \
|
||||
--replace-fail "require('vendor/autoload.php');" "require('vendor/autoload.php'); \$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, 'extraConfig.php'); \$dotenv->load();";
|
||||
--replace-fail "require __DIR__ . '/vendor/autoload.php';" "require('vendor/autoload.php'); \$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, 'extraConfig.php'); \$dotenv->load();";
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
|
||||
@@ -11,6 +11,7 @@ let
|
||||
packages = with pkgs; {
|
||||
"16" = teleport_16;
|
||||
"17" = teleport_17;
|
||||
"18" = teleport_18;
|
||||
};
|
||||
|
||||
minimal = package: {
|
||||
|
||||
@@ -24,8 +24,8 @@ let
|
||||
sha256Hash = "sha256-qA7iu4nK+29aHKsUmyQWuwV0SFnv5cYQvFq5CAMKyKw=";
|
||||
};
|
||||
latestVersion = {
|
||||
version = "2025.1.3.4"; # "Android Studio Narwhal 3 Feature Drop | 2025.1.3 Canary 4"
|
||||
sha256Hash = "sha256-SAdmuuentJZGtjcFAgAedPa9MLAS9vNtWoOI1pPvDhA=";
|
||||
version = "2025.1.4.1"; # "Android Studio Narwhal 4 Feature Drop | 2025.1.4 Canary 1"
|
||||
sha256Hash = "sha256-OGnBf0LrfbN7WpO9skT8+ltAeKejyqHobxFvrzLp3EY=";
|
||||
};
|
||||
in
|
||||
{
|
||||
|
||||
@@ -19,18 +19,18 @@
|
||||
"datagrip": {
|
||||
"update-channel": "DataGrip RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/datagrip/datagrip-{version}.tar.gz",
|
||||
"version": "2025.2.1",
|
||||
"sha256": "1a0dea8a82920818e40b552950e90caf39bcf6ca9ae4e973a1d49e7db0498ecc",
|
||||
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.1.tar.gz",
|
||||
"build_number": "252.23892.464"
|
||||
"version": "2025.2.2",
|
||||
"sha256": "59c793fabaa3ae6563c3118939c069f8baddb1bab489bccd7acddd0cf17de107",
|
||||
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.2.tar.gz",
|
||||
"build_number": "252.25557.34"
|
||||
},
|
||||
"dataspell": {
|
||||
"update-channel": "DataSpell RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/dataspell-{version}.tar.gz",
|
||||
"version": "2025.1.2.1",
|
||||
"sha256": "1759516154a989ad1bcbc0e0cc29eb7b50c5c96b910c1a8926ae87ea5aa07ea6",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.1.2.1.tar.gz",
|
||||
"build_number": "251.26927.91"
|
||||
"version": "2025.2",
|
||||
"sha256": "fd37e488b990e3e395a12c3ebbdb2b4df87c58eb9bb6c82fd38a0322b5c2fb2b",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.tar.gz",
|
||||
"build_number": "252.23892.514"
|
||||
},
|
||||
"gateway": {
|
||||
"update-channel": "Gateway RELEASE",
|
||||
@@ -43,10 +43,10 @@
|
||||
"goland": {
|
||||
"update-channel": "GoLand RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/go/goland-{version}.tar.gz",
|
||||
"version": "2025.2",
|
||||
"sha256": "d285c10055af9002db8c913557535ba46e3158c5733b236add3d71f93873e85a",
|
||||
"url": "https://download.jetbrains.com/go/goland-2025.2.tar.gz",
|
||||
"build_number": "252.23892.449"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "6a835b97bfa86938b45c902f3aad8b3c9c5265840473404c1d664149b0bd7434",
|
||||
"url": "https://download.jetbrains.com/go/goland-2025.2.0.1.tar.gz",
|
||||
"build_number": "252.23892.530"
|
||||
},
|
||||
"idea-community": {
|
||||
"update-channel": "IntelliJ IDEA RELEASE",
|
||||
@@ -84,26 +84,26 @@
|
||||
"pycharm-community": {
|
||||
"update-channel": "PyCharm RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}.tar.gz",
|
||||
"version": "2025.2",
|
||||
"sha256": "356dc81511bbd361c7f106fda8597503c6b9797d36a3a04434bbf0ec35a02434",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.tar.gz",
|
||||
"build_number": "252.23892.439"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "2b95c6169c6f9bb00657e24cecdad23281c423b661918c09781894f3508f8672",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1.tar.gz",
|
||||
"build_number": "252.23892.515"
|
||||
},
|
||||
"pycharm-professional": {
|
||||
"update-channel": "PyCharm RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}.tar.gz",
|
||||
"version": "2025.2",
|
||||
"sha256": "bc3fbb31ea10e171686b9be8734051382233748502f124393c52848aefe97b32",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.tar.gz",
|
||||
"build_number": "252.23892.439"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "555a20eb9a695f52430fc3ef1b43c229186df5bf1c8962de55db0ef7eb308fb4",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1.tar.gz",
|
||||
"build_number": "252.23892.515"
|
||||
},
|
||||
"rider": {
|
||||
"update-channel": "Rider RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.tar.gz",
|
||||
"version": "2025.1.5",
|
||||
"sha256": "b10e21b764e504e33468ee93885fee1102c0b96bd628d1d7c0a19ce6e83910d6",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.1.5.tar.gz",
|
||||
"build_number": "251.27812.87"
|
||||
"version": "2025.2",
|
||||
"sha256": "661d5e8fc12e6373e7a84ee197aa755d77c2e3fe0246284c79bc20682d39d309",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.tar.gz",
|
||||
"build_number": "252.23892.524"
|
||||
},
|
||||
"ruby-mine": {
|
||||
"update-channel": "RubyMine RELEASE",
|
||||
@@ -158,18 +158,18 @@
|
||||
"datagrip": {
|
||||
"update-channel": "DataGrip RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/datagrip/datagrip-{version}-aarch64.tar.gz",
|
||||
"version": "2025.2.1",
|
||||
"sha256": "da21f165bce024ed6e99275350da41fa49e8ac51a47da50ed7a1e104edc06aa0",
|
||||
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.1-aarch64.tar.gz",
|
||||
"build_number": "252.23892.464"
|
||||
"version": "2025.2.2",
|
||||
"sha256": "cb5a8e32343f56bb33721edb8488d74198a5a9b738610a0ed97c0e0a636910fe",
|
||||
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.2-aarch64.tar.gz",
|
||||
"build_number": "252.25557.34"
|
||||
},
|
||||
"dataspell": {
|
||||
"update-channel": "DataSpell RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.tar.gz",
|
||||
"version": "2025.1.2.1",
|
||||
"sha256": "a982a7e8d5b1c293b68983be792a60a885567e9af825e0fce4b2a4b6ac30c9ae",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.1.2.1-aarch64.tar.gz",
|
||||
"build_number": "251.26927.91"
|
||||
"version": "2025.2",
|
||||
"sha256": "3c4261682f54a283ce693315dde5f2a472fec91887cf37b8c6b87c73ce245d2c",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2-aarch64.tar.gz",
|
||||
"build_number": "252.23892.514"
|
||||
},
|
||||
"gateway": {
|
||||
"update-channel": "Gateway RELEASE",
|
||||
@@ -182,10 +182,10 @@
|
||||
"goland": {
|
||||
"update-channel": "GoLand RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/go/goland-{version}-aarch64.tar.gz",
|
||||
"version": "2025.2",
|
||||
"sha256": "99a5f3e0455fddf62ce92644cb53906e4600da6d2d2dad89164c594c31faa157",
|
||||
"url": "https://download.jetbrains.com/go/goland-2025.2-aarch64.tar.gz",
|
||||
"build_number": "252.23892.449"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "377439d9cae41631624c848c61fcb91f1034c6997582346388d8d9f806b6e72f",
|
||||
"url": "https://download.jetbrains.com/go/goland-2025.2.0.1-aarch64.tar.gz",
|
||||
"build_number": "252.23892.530"
|
||||
},
|
||||
"idea-community": {
|
||||
"update-channel": "IntelliJ IDEA RELEASE",
|
||||
@@ -223,26 +223,26 @@
|
||||
"pycharm-community": {
|
||||
"update-channel": "PyCharm RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}-aarch64.tar.gz",
|
||||
"version": "2025.2",
|
||||
"sha256": "2aab469f976c4aa7d6686c8cc81d647960a9496ea2f3aed01f1c09448b443efb",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2-aarch64.tar.gz",
|
||||
"build_number": "252.23892.439"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "820f8f1a749d2544a4e4511ff23e8b55f3fe5faa4e0b715ba44999f784c5ac94",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1-aarch64.tar.gz",
|
||||
"build_number": "252.23892.515"
|
||||
},
|
||||
"pycharm-professional": {
|
||||
"update-channel": "PyCharm RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}-aarch64.tar.gz",
|
||||
"version": "2025.2",
|
||||
"sha256": "27a88a70b8c97be56cdc759cdd7612e55156d67c8bed5a5e23a5af42776bade9",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2-aarch64.tar.gz",
|
||||
"build_number": "252.23892.439"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "d5a00d4774ad5861fad457494b644bb0ee4c6017f1f6c881da4afd23b44fdaf7",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1-aarch64.tar.gz",
|
||||
"build_number": "252.23892.515"
|
||||
},
|
||||
"rider": {
|
||||
"update-channel": "Rider RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.tar.gz",
|
||||
"version": "2025.1.5",
|
||||
"sha256": "15b70a589a0827c6408e15eb8e20dfc2e378df66bb528514a577eeae22079553",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.1.5-aarch64.tar.gz",
|
||||
"build_number": "251.27812.87"
|
||||
"version": "2025.2",
|
||||
"sha256": "19b8c6322aac489888afe9eea81dcb6a114b4cc75d525ee3ea8a86899c6b42c7",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2-aarch64.tar.gz",
|
||||
"build_number": "252.23892.524"
|
||||
},
|
||||
"ruby-mine": {
|
||||
"update-channel": "RubyMine RELEASE",
|
||||
@@ -297,18 +297,18 @@
|
||||
"datagrip": {
|
||||
"update-channel": "DataGrip RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/datagrip/datagrip-{version}.dmg",
|
||||
"version": "2025.2.1",
|
||||
"sha256": "e6c7fd2777ec7f621fa08b6d2d599c84b765d94be9d2b7a62f840ea6253cb9fe",
|
||||
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.1.dmg",
|
||||
"build_number": "252.23892.464"
|
||||
"version": "2025.2.2",
|
||||
"sha256": "7e3993f6fbf4254e81ce7b19fd173ac6a3f93a7d60b4d897f3fd73136ff7dc2e",
|
||||
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.2.dmg",
|
||||
"build_number": "252.25557.34"
|
||||
},
|
||||
"dataspell": {
|
||||
"update-channel": "DataSpell RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/dataspell-{version}.dmg",
|
||||
"version": "2025.1.2.1",
|
||||
"sha256": "21915425a004b9148ab5fb634ab919d328a692847f3229bcd060fc46c2b91e76",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.1.2.1.dmg",
|
||||
"build_number": "251.26927.91"
|
||||
"version": "2025.2",
|
||||
"sha256": "36bd810a0ab4fab0edcc135ef472a731f55c25af80d40b1e6d36a833302d525c",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.dmg",
|
||||
"build_number": "252.23892.514"
|
||||
},
|
||||
"gateway": {
|
||||
"update-channel": "Gateway RELEASE",
|
||||
@@ -321,10 +321,10 @@
|
||||
"goland": {
|
||||
"update-channel": "GoLand RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/go/goland-{version}.dmg",
|
||||
"version": "2025.2",
|
||||
"sha256": "c42e150a88b9d9ef033a7ff3678eb891408668afe83179d4f678bb674dc8e424",
|
||||
"url": "https://download.jetbrains.com/go/goland-2025.2.dmg",
|
||||
"build_number": "252.23892.449"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "67056fa41a9e72b0d0a268f648d3dae6ba0304beae8883cf97bf95ab875195cd",
|
||||
"url": "https://download.jetbrains.com/go/goland-2025.2.0.1.dmg",
|
||||
"build_number": "252.23892.530"
|
||||
},
|
||||
"idea-community": {
|
||||
"update-channel": "IntelliJ IDEA RELEASE",
|
||||
@@ -362,26 +362,26 @@
|
||||
"pycharm-community": {
|
||||
"update-channel": "PyCharm RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}.dmg",
|
||||
"version": "2025.2",
|
||||
"sha256": "ee808240caab0d50932fe25cd3d93aeeb8a531bfbc5b034f0eff72716c3eb6a5",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.dmg",
|
||||
"build_number": "252.23892.439"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "0fa4e9c93bcb1f0d56dd7faecbb01b38d3c07fbbcf4fc8c0ad4dc5dc2f15b5a9",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1.dmg",
|
||||
"build_number": "252.23892.515"
|
||||
},
|
||||
"pycharm-professional": {
|
||||
"update-channel": "PyCharm RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}.dmg",
|
||||
"version": "2025.2",
|
||||
"sha256": "66c6ae1e9e6531bc87f7527221d06647ce18fea15484ad9f371cc51f99a271a0",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.dmg",
|
||||
"build_number": "252.23892.439"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "440e613cc7e9d02ea27c921168b27a120e0eed5d084d878a6e7f9af3c874ac1a",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1.dmg",
|
||||
"build_number": "252.23892.515"
|
||||
},
|
||||
"rider": {
|
||||
"update-channel": "Rider RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.dmg",
|
||||
"version": "2025.1.5",
|
||||
"sha256": "ed39b7f3770bb186014e8cdd6e314b4dfbb0f90e8d24be8b175fbf71ef7957ac",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.1.5.dmg",
|
||||
"build_number": "251.27812.87"
|
||||
"version": "2025.2",
|
||||
"sha256": "c03da6f4c519e1c697ada502f43d1152e41614262970cbbf4df15d2f470658f3",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.dmg",
|
||||
"build_number": "252.23892.524"
|
||||
},
|
||||
"ruby-mine": {
|
||||
"update-channel": "RubyMine RELEASE",
|
||||
@@ -436,18 +436,18 @@
|
||||
"datagrip": {
|
||||
"update-channel": "DataGrip RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/datagrip/datagrip-{version}-aarch64.dmg",
|
||||
"version": "2025.2.1",
|
||||
"sha256": "865a887cc89076eac601bc073e74d6cb1b5711aaf8f4c39a2f7bd18648d9cc6e",
|
||||
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.1-aarch64.dmg",
|
||||
"build_number": "252.23892.464"
|
||||
"version": "2025.2.2",
|
||||
"sha256": "eec04b3602062cf5dd6be20b0c77ce4a384c0727bd43403d1eb9646b268439f6",
|
||||
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.2-aarch64.dmg",
|
||||
"build_number": "252.25557.34"
|
||||
},
|
||||
"dataspell": {
|
||||
"update-channel": "DataSpell RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.dmg",
|
||||
"version": "2025.1.2.1",
|
||||
"sha256": "97588c238523b2c492a322a0751173f908f31eb27e0d38f81dd51f670690a9a5",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.1.2.1-aarch64.dmg",
|
||||
"build_number": "251.26927.91"
|
||||
"version": "2025.2",
|
||||
"sha256": "484c6889a929c3ec572711164600ad93c927b57a3487636d672db77a1e9483f5",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2-aarch64.dmg",
|
||||
"build_number": "252.23892.514"
|
||||
},
|
||||
"gateway": {
|
||||
"update-channel": "Gateway RELEASE",
|
||||
@@ -460,10 +460,10 @@
|
||||
"goland": {
|
||||
"update-channel": "GoLand RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/go/goland-{version}-aarch64.dmg",
|
||||
"version": "2025.2",
|
||||
"sha256": "043600466d739338b9d24a472547b3d7133505165032459e9fe6f913b6920eac",
|
||||
"url": "https://download.jetbrains.com/go/goland-2025.2-aarch64.dmg",
|
||||
"build_number": "252.23892.449"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "e35b7f2ec7e63c0c348e172ddf10410ff108189c4a4a1e4dcfc75c757908b12b",
|
||||
"url": "https://download.jetbrains.com/go/goland-2025.2.0.1-aarch64.dmg",
|
||||
"build_number": "252.23892.530"
|
||||
},
|
||||
"idea-community": {
|
||||
"update-channel": "IntelliJ IDEA RELEASE",
|
||||
@@ -501,26 +501,26 @@
|
||||
"pycharm-community": {
|
||||
"update-channel": "PyCharm RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}-aarch64.dmg",
|
||||
"version": "2025.2",
|
||||
"sha256": "9fd11b6e5fe28d5e3cac86cac554b4e04f775254d141f3c7ec07ee9801ce8a00",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2-aarch64.dmg",
|
||||
"build_number": "252.23892.439"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "acdbfd143a7da358cbd9b1410eff8763f9650c58f9a976d80a9aa8977f358e00",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1-aarch64.dmg",
|
||||
"build_number": "252.23892.515"
|
||||
},
|
||||
"pycharm-professional": {
|
||||
"update-channel": "PyCharm RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}-aarch64.dmg",
|
||||
"version": "2025.2",
|
||||
"sha256": "54b761294795146c575a22ea5d53bc7c0a05ab906836b544ff6b830b4b79b41b",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2-aarch64.dmg",
|
||||
"build_number": "252.23892.439"
|
||||
"version": "2025.2.0.1",
|
||||
"sha256": "9d3265dd828c45681ba608ee2325b3b560396b7048290d7c69714cbc99e86fd7",
|
||||
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1-aarch64.dmg",
|
||||
"build_number": "252.23892.515"
|
||||
},
|
||||
"rider": {
|
||||
"update-channel": "Rider RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.dmg",
|
||||
"version": "2025.1.5",
|
||||
"sha256": "74decd2d7fb0ee97587e9de165b1630bac8a9ba8ad55aa8a64e9c5e173551adb",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.1.5-aarch64.dmg",
|
||||
"build_number": "251.27812.87"
|
||||
"version": "2025.2",
|
||||
"sha256": "ec385a005fb740e6b12a5232ae57c7d189b3d32ac4813734b04d4257421368a3",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2-aarch64.dmg",
|
||||
"build_number": "252.23892.524"
|
||||
},
|
||||
"ruby-mine": {
|
||||
"update-channel": "RubyMine RELEASE",
|
||||
|
||||
@@ -324,6 +324,9 @@ rec {
|
||||
lttng-ust_2_12
|
||||
musl
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isLinux [
|
||||
xorg.xcbutilkeysyms
|
||||
]
|
||||
++ lib.optionals (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch) [
|
||||
expat
|
||||
libxml2
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -13,13 +13,13 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "ppsspp";
|
||||
version = "0-unstable-2025-08-11";
|
||||
version = "0-unstable-2025-08-19";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "hrydgard";
|
||||
repo = "ppsspp";
|
||||
rev = "9912aa5c8d3b95165c56e29ffaa50069aeae0860";
|
||||
hash = "sha256-5snyC0hk1VqYH4aqz4E7ukPyOLrDVZwDsw3LPdHDSzM=";
|
||||
rev = "e526986da2b491763e2d715741f1babeef68f1a6";
|
||||
hash = "sha256-aPYsgb/nO9RzSGL+evMiCoYz3+08HC83An3rMoCWWMw=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -9,6 +9,14 @@
|
||||
callPackage,
|
||||
}:
|
||||
|
||||
let
|
||||
plugins = [
|
||||
"ArchiSteamFarm.OfficialPlugins.ItemsMatcher"
|
||||
"ArchiSteamFarm.OfficialPlugins.MobileAuthenticator"
|
||||
"ArchiSteamFarm.OfficialPlugins.Monitoring"
|
||||
"ArchiSteamFarm.OfficialPlugins.SteamTokenDumper"
|
||||
];
|
||||
in
|
||||
buildDotnetModule rec {
|
||||
pname = "ArchiSteamFarm";
|
||||
# nixpkgs-update: no auto update
|
||||
@@ -26,7 +34,12 @@ buildDotnetModule rec {
|
||||
|
||||
nugetDeps = ./deps.json;
|
||||
|
||||
projectFile = "ArchiSteamFarm.sln";
|
||||
projectFile = [
|
||||
"ArchiSteamFarm"
|
||||
]
|
||||
++ plugins;
|
||||
testProjectFile = "ArchiSteamFarm.Tests";
|
||||
|
||||
executable = "ArchiSteamFarm";
|
||||
|
||||
enableParallelBuilding = false;
|
||||
@@ -50,7 +63,7 @@ buildDotnetModule rec {
|
||||
|
||||
doCheck = true;
|
||||
|
||||
preInstall = ''
|
||||
installPhase = ''
|
||||
dotnetProjectFiles=(ArchiSteamFarm)
|
||||
|
||||
# A mutable path, with this directory tree must be set. By default, this would point at the nix store causing errors.
|
||||
@@ -58,20 +71,19 @@ buildDotnetModule rec {
|
||||
--run 'mkdir -p ~/.config/archisteamfarm/{config,logs,plugins}'
|
||||
--set "ASF_PATH" "~/.config/archisteamfarm"
|
||||
)
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
dotnetInstallPhase
|
||||
|
||||
buildPlugin() {
|
||||
echo "Publishing plugin $1"
|
||||
dotnet publish $1 -p:ContinuousIntegrationBuild=true -p:Deterministic=true \
|
||||
--output $out/lib/ArchiSteamFarm/plugins/$1 --configuration Release \
|
||||
$dotnetFlags $dotnetInstallFlags
|
||||
dotnetProjectFiles=("$1")
|
||||
dotnetInstallPath="$out/lib/ArchiSteamFarm/plugins/$1"
|
||||
dotnetInstallPhase
|
||||
}
|
||||
|
||||
buildPlugin ArchiSteamFarm.OfficialPlugins.ItemsMatcher
|
||||
buildPlugin ArchiSteamFarm.OfficialPlugins.MobileAuthenticator
|
||||
buildPlugin ArchiSteamFarm.OfficialPlugins.Monitoring
|
||||
buildPlugin ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
''
|
||||
+ lib.concatMapStrings (p: "buildPlugin ${p}\n") plugins
|
||||
+ ''
|
||||
|
||||
chmod +x $out/lib/ArchiSteamFarm/ArchiSteamFarm.dll
|
||||
wrapDotnetProgram $out/lib/ArchiSteamFarm/ArchiSteamFarm.dll $out/bin/ArchiSteamFarm
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,11 +9,11 @@
|
||||
|
||||
buildMozillaMach rec {
|
||||
pname = "firefox";
|
||||
version = "140.1.0esr";
|
||||
version = "140.2.0esr";
|
||||
applicationName = "Firefox ESR";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
|
||||
sha512 = "1b5caff9b381cd449c40d148542501f7a31a7151a3f2f888e789c9743af8ee1d1eddbd970f8c0054902d1e1d739221db0cfcf1dc6ab704bb83bbb7b7b6a20055";
|
||||
sha512 = "e4597c4d83ae1a84fce9248fe6ca652af6c3615607fc8973bd917bfdbd2abbceca937fe4c629c0cdc89fa0a5c846b5e2d8a4b44dabf7feb201deb382de0ccc5b";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -9,10 +9,10 @@
|
||||
|
||||
buildMozillaMach rec {
|
||||
pname = "firefox";
|
||||
version = "141.0.3";
|
||||
version = "142.0";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
|
||||
sha512 = "b660b018840c41a254734b4847a791f1a9fd2f72dbea825ea5971fd0b3269a43f1f4be1ccf4a53f7809b6b98398f4e04a142e57f8882d6590bab636ef75002f6";
|
||||
sha512 = "b0c1c766083a30a92b77dcf16a584d9fb341cd811d21c3a34da4cd0d714fd6adc73b608092d66058697bc4562faacc44859153e49ffdeb6e14e059e59f2ea246";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
(
|
||||
(buildMozillaMach rec {
|
||||
pname = "floorp";
|
||||
packageVersion = "11.29.0";
|
||||
packageVersion = "11.30.0";
|
||||
applicationName = "Floorp";
|
||||
binaryName = "floorp";
|
||||
branding = "browser/branding/official";
|
||||
@@ -17,14 +17,14 @@
|
||||
allowAddonSideload = true;
|
||||
|
||||
# Must match the contents of `browser/config/version.txt` in the source tree
|
||||
version = "128.13.0";
|
||||
version = "128.14.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Floorp-Projects";
|
||||
repo = "Floorp";
|
||||
fetchSubmodules = true;
|
||||
rev = "v${packageVersion}";
|
||||
hash = "sha256-uTTI9n99P4hHDf849lR7oiNGLbCa03ivjE1xF0gyT4Y=";
|
||||
hash = "sha256-4IAN0S9JWjaGXtnRUJz3HqUm+ZWL7KmryLu8ojSXiqg=";
|
||||
};
|
||||
|
||||
extraConfigureFlags = [
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"packageVersion": "141.0.3-1",
|
||||
"packageVersion": "142.0-1",
|
||||
"source": {
|
||||
"rev": "141.0.3-1",
|
||||
"hash": "sha256-0SosHE51IkDyg37fHnlJKn7IbMwr1iSXHr5Wuv2WkPg="
|
||||
"rev": "142.0-1",
|
||||
"hash": "sha256-/bn9xeDxnJCQol/E8rhS8RVhpUj7UN+QScSIzLFnZ/o="
|
||||
},
|
||||
"firefox": {
|
||||
"version": "141.0.3",
|
||||
"hash": "sha512-tmCwGIQMQaJUc0tIR6eR8an9L3Lb6oJepZcf0LMmmkPx9L4cz0pT94Cba5g5j04EoULlf4iC1lkLq2Nu91AC9g=="
|
||||
"version": "142.0",
|
||||
"hash": "sha512-sMHHZgg6MKkrd9zxalhNn7NBzYEdIcOjTaTNDXFP1q3HO2CAktZgWGl7xFYvqsxEhZFT5J/9624U4Fnlny6iRg=="
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ let
|
||||
mainProgram = "discord";
|
||||
maintainers = with lib.maintainers; [
|
||||
artturin
|
||||
donteatoreo
|
||||
FlameFlag
|
||||
infinidoge
|
||||
jopejoe1
|
||||
Scrumplex
|
||||
|
||||
@@ -46,19 +46,19 @@ let
|
||||
callPackage
|
||||
(import ./generic.nix rec {
|
||||
pname = "singularity-ce";
|
||||
version = "4.3.2";
|
||||
version = "4.3.3";
|
||||
projectName = "singularity";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "sylabs";
|
||||
repo = "singularity";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-lYYY449agINk1cwRl06gstGhkwQKaeZdLnwT6bW6HY4=";
|
||||
hash = "sha256-gQuakfQgB5gLVYLmmThy06CyGBhlBOCJI9jaEm7ucf0=";
|
||||
};
|
||||
|
||||
# Override vendorHash with overrideAttrs.
|
||||
# See https://nixos.org/manual/nixpkgs/unstable/#buildGoModule-vendorHash
|
||||
vendorHash = "sha256-3CEkaG8k6W1/8v8tsVLXdSV68QHUgn5/BEd8qjkW7ik=";
|
||||
vendorHash = "sha256-z8bLbudm1b5xFCAUpL/m90vxwLJlBqpQCjAEjSYOQH8=";
|
||||
|
||||
extraConfigureFlags = [
|
||||
# Do not build squashfuse from the Git submodule sources, use Nixpkgs provided version
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
|
||||
index 769ac0379045..160734dd386d 100644
|
||||
--- a/build/moz.configure/toolchain.configure
|
||||
+++ b/build/moz.configure/toolchain.configure
|
||||
@@ -233,7 +233,7 @@ with only_when(host_is_osx | target_is_osx):
|
||||
)
|
||||
|
||||
def mac_sdk_min_version():
|
||||
- return "15.4"
|
||||
+ return "15.2"
|
||||
|
||||
@depends(
|
||||
"--with-macos-sdk",
|
||||
@@ -316,12 +316,15 @@ buildStdenv.mkDerivation {
|
||||
# https://hg-edge.mozilla.org/mozilla-central/rev/aa8a29bd1fb9
|
||||
./139-wayland-drag-animation.patch
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast version "139" && lib.versionOlder version "141.0.2") [
|
||||
./139-relax-apple-sdk.patch
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast version "141.0.2") [
|
||||
./142-relax-apple-sdk.patch
|
||||
]
|
||||
++
|
||||
lib.optionals
|
||||
(
|
||||
lib.versionAtLeast version "141.0.2"
|
||||
|| (lib.versionAtLeast version "140.2.0" && lib.versionOlder version "141.0")
|
||||
)
|
||||
[
|
||||
./142-relax-apple-sdk.patch
|
||||
]
|
||||
++ lib.optionals (lib.versionOlder version "139") [
|
||||
# Fix for missing vector header on macOS
|
||||
# https://bugzilla.mozilla.org/show_bug.cgi?id=1959377
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
_dotnetIsSolution() {
|
||||
dotnet sln ${1:+"$1"} list 2>/dev/null
|
||||
}
|
||||
|
||||
dotnetConfigurePhase() {
|
||||
echo "Executing dotnetConfigureHook"
|
||||
|
||||
@@ -108,9 +112,12 @@ dotnetBuildPhase() {
|
||||
dotnetBuild() {
|
||||
local -r projectFile="${1-}"
|
||||
|
||||
local useRuntime=
|
||||
_dotnetIsSolution "$projectFile" || useRuntime=1
|
||||
|
||||
for runtimeId in "${runtimeIds[@]}"; do
|
||||
local runtimeIdFlags=()
|
||||
if [[ $projectFile == *.csproj || -n ${dotnetSelfContainedBuild-} ]]; then
|
||||
if [[ -n $useRuntime ]]; then
|
||||
runtimeIdFlags+=("--runtime" "$runtimeId")
|
||||
fi
|
||||
|
||||
@@ -188,9 +195,12 @@ dotnetCheckPhase() {
|
||||
|
||||
local projectFile runtimeId
|
||||
for projectFile in "${testProjectFiles[@]-${projectFiles[@]}}"; do
|
||||
local useRuntime=
|
||||
_dotnetIsSolution "$projectFile" || useRuntime=1
|
||||
|
||||
for runtimeId in "${runtimeIds[@]}"; do
|
||||
local runtimeIdFlags=()
|
||||
if [[ $projectFile == *.csproj ]]; then
|
||||
if [[ -n $useRuntime ]]; then
|
||||
runtimeIdFlags=("--runtime" "$runtimeId")
|
||||
fi
|
||||
|
||||
@@ -356,9 +366,12 @@ dotnetInstallPhase() {
|
||||
dotnetPublish() {
|
||||
local -r projectFile="${1-}"
|
||||
|
||||
local useRuntime=
|
||||
_dotnetIsSolution "$projectFile" || useRuntime=1
|
||||
|
||||
for runtimeId in "${runtimeIds[@]}"; do
|
||||
runtimeIdFlags=()
|
||||
if [[ $projectFile == *.csproj || -n ${dotnetSelfContainedBuild-} ]]; then
|
||||
local runtimeIdFlags=()
|
||||
if [[ -n $useRuntime ]]; then
|
||||
runtimeIdFlags+=("--runtime" "$runtimeId")
|
||||
fi
|
||||
|
||||
@@ -380,7 +393,18 @@ dotnetInstallPhase() {
|
||||
dotnetPack() {
|
||||
local -r projectFile="${1-}"
|
||||
|
||||
local useRuntime=
|
||||
_dotnetIsSolution "$projectFile" || useRuntime=1
|
||||
|
||||
for runtimeId in "${runtimeIds[@]}"; do
|
||||
local runtimeIdFlags=()
|
||||
if [[ -n $useRuntime ]]; then
|
||||
runtimeIdFlags+=("--runtime" "$runtimeId")
|
||||
# set RuntimeIdentifier because --runtime is broken:
|
||||
# https://github.com/dotnet/sdk/issues/13983
|
||||
runtimeIdFlags+=(-p:RuntimeIdentifier="$runtimeId")
|
||||
fi
|
||||
|
||||
dotnet pack ${1+"$projectFile"} \
|
||||
-maxcpucount:"$maxCpuFlag" \
|
||||
-p:ContinuousIntegrationBuild=true \
|
||||
@@ -390,7 +414,7 @@ dotnetInstallPhase() {
|
||||
--configuration "$dotnetBuildType" \
|
||||
--no-restore \
|
||||
--no-build \
|
||||
--runtime "$runtimeId" \
|
||||
"${runtimeIdFlags[@]}" \
|
||||
"${flags[@]}" \
|
||||
"${packFlags[@]}"
|
||||
done
|
||||
|
||||
@@ -31,6 +31,8 @@ args@{
|
||||
# and `urls` can be specified, not both.
|
||||
url ? "",
|
||||
urls ? [ ],
|
||||
# Metadata
|
||||
meta ? { },
|
||||
# The rest of the arguments are just forwarded to `fetchurl`.
|
||||
...
|
||||
}:
|
||||
@@ -71,6 +73,7 @@ let
|
||||
"classifier"
|
||||
"repos"
|
||||
"url"
|
||||
"meta"
|
||||
]
|
||||
// {
|
||||
urls = urls_;
|
||||
@@ -79,7 +82,7 @@ let
|
||||
);
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
inherit pname version;
|
||||
inherit pname version meta;
|
||||
dontUnpack = true;
|
||||
# By moving the jar to $out/share/java we make it discoverable by java
|
||||
# packages packages that mention this derivation in their buildInputs.
|
||||
|
||||
@@ -0,0 +1,215 @@
|
||||
{
|
||||
lib,
|
||||
rustPlatform,
|
||||
fetchFromGitHub,
|
||||
fetchpatch,
|
||||
makeWrapper,
|
||||
binaryen,
|
||||
cargo,
|
||||
libfido2,
|
||||
nodejs,
|
||||
openssl,
|
||||
pkg-config,
|
||||
pnpm_10,
|
||||
rustc,
|
||||
stdenv,
|
||||
xdg-utils,
|
||||
wasm-pack,
|
||||
nixosTests,
|
||||
}:
|
||||
|
||||
{
|
||||
version,
|
||||
hash,
|
||||
cargoHash,
|
||||
pnpmHash,
|
||||
vendorHash,
|
||||
wasm-bindgen-cli,
|
||||
buildGoModule,
|
||||
|
||||
withRdpClient ? true,
|
||||
extPatches ? [ ],
|
||||
}:
|
||||
let
|
||||
|
||||
# This repo has a private submodule "e" which fetchgit cannot handle without failing.
|
||||
src = fetchFromGitHub {
|
||||
owner = "gravitational";
|
||||
repo = "teleport";
|
||||
tag = "v${version}";
|
||||
inherit hash;
|
||||
};
|
||||
pname = "teleport";
|
||||
inherit version;
|
||||
|
||||
rdpClient = rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "teleport-rdpclient";
|
||||
inherit cargoHash;
|
||||
inherit version src;
|
||||
|
||||
buildAndTestSubdir = "lib/srv/desktop/rdp/rdpclient";
|
||||
|
||||
buildInputs = [ openssl ];
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/issues/161570 ,
|
||||
# buildRustPackage sets strictDeps = true;
|
||||
nativeCheckInputs = finalAttrs.buildInputs;
|
||||
|
||||
OPENSSL_NO_VENDOR = "1";
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/include
|
||||
cp ${finalAttrs.buildAndTestSubdir}/librdprs.h $out/include/
|
||||
'';
|
||||
});
|
||||
|
||||
webassets = stdenv.mkDerivation {
|
||||
pname = "teleport-webassets";
|
||||
inherit src version;
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
||||
inherit src;
|
||||
hash = cargoHash;
|
||||
};
|
||||
|
||||
pnpmDeps = pnpm_10.fetchDeps {
|
||||
inherit src pname version;
|
||||
fetcherVersion = 1;
|
||||
hash = pnpmHash;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
binaryen
|
||||
cargo
|
||||
nodejs
|
||||
pnpm_10.configHook
|
||||
rustc
|
||||
rustc.llvmPackages.lld
|
||||
rustPlatform.cargoSetupHook
|
||||
wasm-bindgen-cli
|
||||
wasm-pack
|
||||
];
|
||||
|
||||
patches = [
|
||||
./disable-wasm-opt-for-ironrdp.patch
|
||||
];
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
export HOME=$(mktemp -d)
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
PATH=$PATH:$PWD/node_modules/.bin
|
||||
|
||||
pushd web/packages
|
||||
pushd shared
|
||||
# https://github.com/gravitational/teleport/blob/6b91fe5bbb9e87db4c63d19f94ed4f7d0f9eba43/web/packages/teleport/README.md?plain=1#L18-L20
|
||||
RUST_MIN_STACK=16777216 wasm-pack build ./libs/ironrdp --target web --mode no-install
|
||||
popd
|
||||
pushd teleport
|
||||
vite build
|
||||
popd
|
||||
popd
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp -R webassets/. $out
|
||||
'';
|
||||
};
|
||||
in
|
||||
buildGoModule (finalAttrs: {
|
||||
inherit pname src version;
|
||||
inherit vendorHash;
|
||||
proxyVendor = true;
|
||||
|
||||
subPackages = [
|
||||
"tool/tbot"
|
||||
"tool/tctl"
|
||||
"tool/teleport"
|
||||
"tool/tsh"
|
||||
];
|
||||
tags = [
|
||||
"libfido2"
|
||||
"webassets_embed"
|
||||
]
|
||||
++ lib.optional withRdpClient "desktop_access_rdp";
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
libfido2
|
||||
];
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
pkg-config
|
||||
];
|
||||
|
||||
patches = extPatches ++ [
|
||||
./0001-fix-add-nix-path-to-exec-env.patch
|
||||
./rdpclient.patch
|
||||
./tsh.patch
|
||||
];
|
||||
|
||||
# Reduce closure size for client machines
|
||||
outputs = [
|
||||
"out"
|
||||
"client"
|
||||
];
|
||||
|
||||
preBuild = ''
|
||||
cp -r ${webassets} webassets
|
||||
''
|
||||
+ lib.optionalString withRdpClient ''
|
||||
ln -s ${rdpClient}/lib/* lib/
|
||||
ln -s ${rdpClient}/include/* lib/srv/desktop/rdp/rdpclient/
|
||||
'';
|
||||
|
||||
# Multiple tests fail in the build sandbox
|
||||
# due to trying to spawn nixbld's shell (/noshell), etc.
|
||||
doCheck = false;
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $client/bin
|
||||
mv {$out,$client}/bin/tsh
|
||||
# make xdg-open overrideable at runtime
|
||||
wrapProgram $client/bin/tsh --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
|
||||
ln -s {$client,$out}/bin/tsh
|
||||
'';
|
||||
|
||||
doInstallCheck = true;
|
||||
|
||||
installCheckPhase = ''
|
||||
export HOME=$(mktemp -d)
|
||||
$out/bin/tsh version | grep ${version} > /dev/null
|
||||
$client/bin/tsh version | grep ${version} > /dev/null
|
||||
$out/bin/tbot version | grep ${version} > /dev/null
|
||||
$out/bin/tctl version | grep ${version} > /dev/null
|
||||
$out/bin/teleport version | grep ${version} > /dev/null
|
||||
'';
|
||||
|
||||
passthru.tests = nixosTests.teleport;
|
||||
|
||||
meta = {
|
||||
description = "Certificate authority and access plane for SSH, Kubernetes, web applications, and databases";
|
||||
homepage = "https://goteleport.com/";
|
||||
license = lib.licenses.agpl3Plus;
|
||||
maintainers = with lib.maintainers; [
|
||||
arianvp
|
||||
justinas
|
||||
sigma
|
||||
tomberek
|
||||
freezeboy
|
||||
techknowlogick
|
||||
juliusfreudenberger
|
||||
];
|
||||
platforms = lib.platforms.unix;
|
||||
# go-libfido2 is broken on platforms with less than 64-bit because it defines an array
|
||||
# which occupies more than 31 bits of address space.
|
||||
broken = stdenv.hostPlatform.parsed.cpu.bits < 64;
|
||||
};
|
||||
})
|
||||
@@ -35,7 +35,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
homepage = "https://alt-tab-macos.netlify.app";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [
|
||||
donteatoreo
|
||||
FlameFlag
|
||||
emilytrau
|
||||
];
|
||||
platforms = lib.platforms.darwin;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{ "_comment": "@generated by pkgs/by-name/bu/buck2/update.sh"
|
||||
, "_prelude": "sha256-eU4EZ9OqJVUH/YPFctJZM+KZK70IEslr2qLUUvz3ctM="
|
||||
, "buck2-x86_64-linux": "sha256-r/5txsY7/i0fQaQsH40YdAhSD/bXtr5aGlAuxaOs8jg="
|
||||
, "rust-project-x86_64-linux": "sha256-XJFhaxJvOklMMO3emtdJS4zNu989HLCIU9qBP31XpCo="
|
||||
, "buck2-x86_64-darwin": "sha256-9SW0xn7w2dH81oHwze/ysnQyrIAgu8+1WJuXMmxslFo="
|
||||
, "rust-project-x86_64-darwin": "sha256-MvYv96OtOU7NEZKXf3gDvCjEcbegLI+1HFN7XBdPAXA="
|
||||
, "buck2-aarch64-linux": "sha256-wlmkgWdotvqxmflzoJG266weCsjxtM0mVO0xf7vKVr0="
|
||||
, "rust-project-aarch64-linux": "sha256-7zhO+s8LOuDj5ysyADkfqRIZiOG9ewBtfcB43sPfVc4="
|
||||
, "buck2-aarch64-darwin": "sha256-0bNtPX8TLTCxf7rEeiUYtJUbzRmgRdgHrv98mmmM/Rg="
|
||||
, "rust-project-aarch64-darwin": "sha256-a4OLLLYJjTBskXfB7OWqULPkV5amgDEHudJKRLGwuAU="
|
||||
, "_prelude": "sha256-cyuOMi8x8q9gd6p1obnYYDVPxyONZ+y41AFXvSbUjC0="
|
||||
, "buck2-x86_64-linux": "sha256-l/W6Bza01IyOFvHb2rlBY72Tl+JNgwmkO8EhUPWrxBY="
|
||||
, "rust-project-x86_64-linux": "sha256-3UGgvQKSm6Qohk/NDRU1fM+eFEpqM9XMLxL2AkXXrW0="
|
||||
, "buck2-x86_64-darwin": "sha256-wHk/tJJbupMsrcmXXNVXurfLY2TOSssMnuTZ7LNjASY="
|
||||
, "rust-project-x86_64-darwin": "sha256-ePawMIfltPRK3mJJxI1BvGs6b2vIcgWzW2XTJykUsdI="
|
||||
, "buck2-aarch64-linux": "sha256-dhqBYFQ6e5nWSrbUMUFoato1sb4bl95JcdqcgeC5mcs="
|
||||
, "rust-project-aarch64-linux": "sha256-Zduna35ieycN80K2wh5OkcSaOWiqhxLJkduBk7f2XqU="
|
||||
, "buck2-aarch64-darwin": "sha256-XtGs7g64s76AYhpFDbqSuSlblRauxJM0PaAk1MNNgxA="
|
||||
, "rust-project-aarch64-darwin": "sha256-CkyLLv41iJTKHVB0e355ZO2MV7NzQeiF1gtWEGF5oAY="
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ let
|
||||
buildHashes = builtins.fromJSON (builtins.readFile ./hashes.json);
|
||||
|
||||
# our version of buck2; this should be a git tag
|
||||
version = "2025-05-06";
|
||||
version = "2025-08-15";
|
||||
|
||||
# map our platform name to the rust toolchain suffix
|
||||
# NOTE (aseipp): must be synchronized with update.sh!
|
||||
@@ -82,7 +82,7 @@ let
|
||||
# tooling
|
||||
prelude-src =
|
||||
let
|
||||
prelude-hash = "48c249f8c7b99ff501d6e857754760315072b306";
|
||||
prelude-hash = "892cb85f5fc3258c7e4f89a836821ec4b8c7ee44";
|
||||
name = "buck2-prelude-${version}.tar.gz";
|
||||
hash = buildHashes."_prelude";
|
||||
url = "https://github.com/facebook/buck2-prelude/archive/${prelude-hash}.tar.gz";
|
||||
|
||||
@@ -21,7 +21,7 @@ buildDotnetGlobalTool {
|
||||
changelog = "https://github.com/waf/CSharpRepl/blob/main/CHANGELOG.md";
|
||||
license = lib.licenses.mpl20;
|
||||
platforms = lib.platforms.unix;
|
||||
maintainers = with lib.maintainers; [ donteatoreo ];
|
||||
maintainers = with lib.maintainers; [ FlameFlag ];
|
||||
mainProgram = "csharprepl";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -21,16 +21,16 @@
|
||||
let
|
||||
self = rustPlatform.buildRustPackage {
|
||||
pname = "czkawka";
|
||||
version = "9.0.0";
|
||||
version = "10.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "qarmin";
|
||||
repo = "czkawka";
|
||||
tag = self.version;
|
||||
hash = "sha256-ePiHDfQ1QC3nff8uWE0ggiTuulBomuoZ3ta0redUYXY=";
|
||||
hash = "sha256-r6EdTv95R8+XhaoA9OeqnGGl09kz8kMJaDPDRV6wQe8=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-Djvb5Hen6XPm6aJuwa6cGPojz9+kXXidysr3URDwDFM=";
|
||||
cargoHash = "sha256-o4XjHJ7eCckTXqjz1tS4OSCP8DZzjxfWoMMy5Gab2rI=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
gobject-introspection
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
}:
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "dooit";
|
||||
version = "3.2.3";
|
||||
version = "3.3.3";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "dooit-org";
|
||||
repo = "dooit";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-bI9X+2tTLnQwxfsnBmy2vBI3lJ4UX418zOy3oniVKWc=";
|
||||
hash = "sha256-MWdih+j7spUVEWXCBzF2J/FVXK0TQ8VhrJNDhNfxpQE=";
|
||||
};
|
||||
|
||||
build-system = with python3.pkgs; [ poetry-core ];
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
}:
|
||||
let
|
||||
pname = "e1s";
|
||||
version = "1.0.49";
|
||||
version = "1.0.50";
|
||||
in
|
||||
buildGoModule {
|
||||
inherit pname version;
|
||||
@@ -14,7 +14,7 @@ buildGoModule {
|
||||
owner = "keidarcy";
|
||||
repo = "e1s";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-7GHNhX0hiRHQ0OH1DuHG9SPcTmm8W5CLU1Idx1pJnwE=";
|
||||
hash = "sha256-ntuFMxuCrA0meE8tOnA9oPLLvYfXyhQgebBuKELeDgQ=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-1lise/u40Q8W9STsuyrWIbhf2HY+SFCytUL1PTSWvfY=";
|
||||
|
||||
@@ -9,16 +9,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "flyctl";
|
||||
version = "0.3.169";
|
||||
version = "0.3.171";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "superfly";
|
||||
repo = "flyctl";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-F2QMQ24+wSKH8zmTFSWsSl9O9+Hc4e7Rmn2K9YXJi4k=";
|
||||
hash = "sha256-9FJ/n2LoTrQmcO+J3eXxexggFhvP22yYFbrryd0rGtM=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-boaz0fR97NtU/wzIE2uPbDmP89ovkzNy8bpe0nrItMw=";
|
||||
vendorHash = "sha256-uXCy/8HkwqGnQEoNtyOErLw9byG8SWc5YdzYZXwjhW4=";
|
||||
|
||||
subPackages = [ "." ];
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ python3Packages.buildPythonApplication {
|
||||
mainProgram = "gallery-dl";
|
||||
maintainers = with lib.maintainers; [
|
||||
dawidsowa
|
||||
donteatoreo
|
||||
FlameFlag
|
||||
lucasew
|
||||
];
|
||||
};
|
||||
|
||||
@@ -56,7 +56,7 @@ buildNpmPackage (finalAttrs: {
|
||||
homepage = "https://github.com/google-gemini/gemini-cli";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [
|
||||
donteatoreo
|
||||
FlameFlag
|
||||
taranarmo
|
||||
];
|
||||
platforms = lib.platforms.all;
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "grype";
|
||||
version = "0.92.2";
|
||||
version = "0.98.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "anchore";
|
||||
repo = "grype";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-OySQO/ZJvaD4mrIRqymBJDXdPC8ZWCz+ELrMXvmQPvk=";
|
||||
hash = "sha256-EJEQHi3N1O5rl0TWxRR/yUkZpbZv4++W7NbUbVEN8e8=";
|
||||
# populate values that require us to use git. By doing this in postFetch we
|
||||
# can delete .git afterwards and maintain better reproducibility of the src.
|
||||
leaveDotGit = true;
|
||||
@@ -30,7 +30,7 @@ buildGoModule (finalAttrs: {
|
||||
|
||||
proxyVendor = true;
|
||||
|
||||
vendorHash = "sha256-Dp+BVwlBqMbAZivOHQWALMrLVtAncGT/rvbbIk1BFFQ=";
|
||||
vendorHash = "sha256-dSIArK9m7oFu497/wpiiwLDLNk8IxNfYC3RHCQcMviM=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
@@ -75,7 +75,8 @@ buildGoModule (finalAttrs: {
|
||||
substituteInPlace test/cli/db_providers_test.go \
|
||||
--replace-fail "TestDBProviders" "SkipDBProviders"
|
||||
substituteInPlace grype/presenter/cyclonedx/presenter_test.go \
|
||||
--replace-fail "TestCycloneDxPresenterDir" "SkipCycloneDxPresenterDir"
|
||||
--replace-fail "TestCycloneDxPresenterDir" "SkipCycloneDxPresenterDir" \
|
||||
--replace-fail "Test_CycloneDX_Valid" "Skip_CycloneDX_Valid"
|
||||
|
||||
# remove tests that depend on docker
|
||||
substituteInPlace test/cli/cmd_test.go \
|
||||
|
||||
@@ -31,7 +31,7 @@ stdenvNoCC.mkDerivation rec {
|
||||
description = "Ultra-light MacOS utility that helps hide menu bar icons";
|
||||
homepage = "https://github.com/dwarvesf/hidden";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ donteatoreo ];
|
||||
maintainers = with lib.maintainers; [ FlameFlag ];
|
||||
platforms = lib.platforms.darwin;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
};
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
hiera-eyaml (3.0.0)
|
||||
highline (~> 1.6.19)
|
||||
optimist
|
||||
highline (1.6.21)
|
||||
optimist (3.0.0)
|
||||
hiera-eyaml (4.3.0)
|
||||
highline (>= 2.1, < 4)
|
||||
optimist (~> 3.1)
|
||||
highline (3.1.2)
|
||||
reline
|
||||
io-console (0.8.1)
|
||||
optimist (3.2.1)
|
||||
reline (0.6.2)
|
||||
io-console (~> 0.5)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
@@ -14,4 +18,4 @@ DEPENDENCIES
|
||||
hiera-eyaml
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
||||
2.6.9
|
||||
|
||||
@@ -8,27 +8,51 @@
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "049rxnwyivqgyjl0sjg7cb2q44ic0wsml288caspd1ps8v31gl18";
|
||||
sha256 = "02mb113yjzwb6jkckybzsiq803c688r9xpv4w1nxbckhkpma5sqr";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.0";
|
||||
version = "4.3.0";
|
||||
};
|
||||
highline = {
|
||||
dependencies = [ "reline" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "06bml1fjsnrhd956wqq5k3w8cyd09rv1vixdpa3zzkl6xs72jdn1";
|
||||
sha256 = "0jmvyhjp2v3iq47la7w6psrxbprnbnmzz0hxxski3vzn356x7jv7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.6.21";
|
||||
version = "3.1.2";
|
||||
};
|
||||
io-console = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "1jszj95hazqqpnrjjzr326nn1j32xmsc9xvd97mbcrrgdc54858y";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.8.1";
|
||||
};
|
||||
optimist = {
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "05jxrp3nbn5iilc1k7ir90mfnwc5abc9h78s5rpm3qafwqxvcj4j";
|
||||
sha256 = "0kp3f8g7g7cbw5vfkmpdv71pphhpcxk3lpc892mj9apkd7ys1y4c";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.0";
|
||||
version = "3.2.1";
|
||||
};
|
||||
reline = {
|
||||
dependencies = [ "io-console" ];
|
||||
groups = [ "default" ];
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0ii8l0q5zkang3lxqlsamzfz5ja7jc8ln905isfdawl802k2db8x";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.6.2";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ bundlerEnv {
|
||||
|
||||
meta = with lib; {
|
||||
description = "Per-value asymmetric encryption of sensitive data for Hiera";
|
||||
homepage = "https://github.com/TomPoulton/hiera-eyaml";
|
||||
homepage = "https://github.com/voxpupuli/hiera-eyaml";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [
|
||||
benley
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
lib,
|
||||
appimageTools,
|
||||
fetchurl,
|
||||
version ? "0.9.12.0",
|
||||
hash ? "sha256-nWt/DOzoQ05F+uk9sDSumb19vQib1Vh/8ywB/d87epc=",
|
||||
version ? "0.9.12.1",
|
||||
hash ? "sha256-6Lun0HyfAi7anivgGsGdUPPX9kZrWwh8fq+qvVL/CdU=",
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
|
||||
python313Packages.buildPythonApplication rec {
|
||||
pname = "high-tide";
|
||||
version = "0.1.8";
|
||||
version = "1.0.0";
|
||||
pyproject = false;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Nokse22";
|
||||
repo = "high-tide";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-QcTK5E8rz/JcC40CCCK8G7PUZ6UAg53UPmxyLBXNHxY=";
|
||||
hash = "sha256-lvfEqXXlDuW+30iTQ0FddcnAMZRM0BYeuxLN4++xs/0=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -71,6 +71,7 @@ python313Packages.buildPythonApplication rec {
|
||||
license = with lib.licenses; [ gpl3Plus ];
|
||||
mainProgram = "high-tide";
|
||||
maintainers = with lib.maintainers; [
|
||||
drafolin
|
||||
nilathedragon
|
||||
nyabinary
|
||||
griffi-gh
|
||||
|
||||
@@ -34,7 +34,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
description = "Powerful menu bar manager for macOS";
|
||||
homepage = "https://icemenubar.app/";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ donteatoreo ];
|
||||
maintainers = with lib.maintainers; [ FlameFlag ];
|
||||
platforms = lib.platforms.darwin;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
};
|
||||
|
||||
@@ -34,7 +34,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
license = lib.licenses.gpl3;
|
||||
maintainers = with lib.maintainers; [
|
||||
arkivm
|
||||
donteatoreo
|
||||
FlameFlag
|
||||
stepbrobd
|
||||
];
|
||||
mainProgram = "iina";
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
{
|
||||
"version": "1.138.0",
|
||||
"hash": "sha256-yOGqQMy2PdGlHAtfuLB74UokGIwzi3yCiaBOZ/Orsf0=",
|
||||
"version": "1.138.1",
|
||||
"hash": "sha256-oaZN0kF82mS25bDSTXRjYnWG9RAMSbCUhXn9t0am96U=",
|
||||
"components": {
|
||||
"cli": {
|
||||
"npmDepsHash": "sha256-NFEAsy1SabGvQMX+k7jIuBLdfjhb3v9x1O2T9EbTPEM=",
|
||||
"version": "2.2.78"
|
||||
"npmDepsHash": "sha256-6k83QOdKh+FlVnYvA9j60115oohUMDc2YvGaj/GMukE=",
|
||||
"version": "2.2.79"
|
||||
},
|
||||
"server": {
|
||||
"npmDepsHash": "sha256-B/j4b0ETfM+K9v757egm1DUTynfnFHb8PVRFhxq1H5Y=",
|
||||
"version": "1.138.0"
|
||||
"npmDepsHash": "sha256-4sqWIIGQ8ZW7TvJoNjNNliriuV6Su0askAN6pAq9VFc=",
|
||||
"version": "1.138.1"
|
||||
},
|
||||
"web": {
|
||||
"npmDepsHash": "sha256-LkGeZPyfJ6wo1O5I13OL9Iz6mjRNXjTNOi5BVoQWQs4=",
|
||||
"version": "1.138.0"
|
||||
"npmDepsHash": "sha256-+W8cDgy3qe6RDen8SEdHPNADkKb4zZH8C/Am/bdU42c=",
|
||||
"version": "1.138.1"
|
||||
},
|
||||
"open-api/typescript-sdk": {
|
||||
"npmDepsHash": "sha256-n1OTaqwfVy3RB6hi2rRGGjSNXsrFRwZMSyKfEuYy57U=",
|
||||
"version": "1.138.0"
|
||||
"npmDepsHash": "sha256-GfmFPsnFu7l4EsnPDv4nj5KLkOz8nEJvMT1BE7zIQ3k=",
|
||||
"version": "1.138.1"
|
||||
},
|
||||
"geonames": {
|
||||
"timestamp": "20250815003647",
|
||||
"hash": "sha256-GYO+fbdXC2z0scne9kh+JLpp7h9k2w0tkIcyYDbNusA="
|
||||
"timestamp": "20250818205425",
|
||||
"hash": "sha256-zZHAomW1C4qReFbhme5dkVnTiLw+jmhZhzuYvoBVBCY="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,651 @@
|
||||
diff --git a/yarn.lock b/yarn.lock
|
||||
index 691942c1..6d3bd8ce 100644
|
||||
--- a/yarn.lock
|
||||
+++ b/yarn.lock
|
||||
@@ -2,11 +2,71 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
+"@parcel/watcher-android-arm64@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1"
|
||||
+ integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==
|
||||
+
|
||||
+"@parcel/watcher-darwin-arm64@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67"
|
||||
+ integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==
|
||||
+
|
||||
+"@parcel/watcher-darwin-x64@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8"
|
||||
+ integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==
|
||||
+
|
||||
+"@parcel/watcher-freebsd-x64@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b"
|
||||
+ integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==
|
||||
+
|
||||
+"@parcel/watcher-linux-arm-glibc@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1"
|
||||
+ integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==
|
||||
+
|
||||
+"@parcel/watcher-linux-arm-musl@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e"
|
||||
+ integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==
|
||||
+
|
||||
+"@parcel/watcher-linux-arm64-glibc@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30"
|
||||
+ integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==
|
||||
+
|
||||
+"@parcel/watcher-linux-arm64-musl@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2"
|
||||
+ integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==
|
||||
+
|
||||
"@parcel/watcher-linux-x64-glibc@2.5.1":
|
||||
version "2.5.1"
|
||||
resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz"
|
||||
integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==
|
||||
|
||||
+"@parcel/watcher-linux-x64-musl@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee"
|
||||
+ integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==
|
||||
+
|
||||
+"@parcel/watcher-win32-arm64@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243"
|
||||
+ integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==
|
||||
+
|
||||
+"@parcel/watcher-win32-ia32@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6"
|
||||
+ integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==
|
||||
+
|
||||
+"@parcel/watcher-win32-x64@2.5.1":
|
||||
+ version "2.5.1"
|
||||
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947"
|
||||
+ integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==
|
||||
+
|
||||
"@parcel/watcher@^2.4.1":
|
||||
version "2.5.1"
|
||||
resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz"
|
||||
@@ -105,7 +165,9 @@ async@^2.6.0:
|
||||
lodash "^4.17.14"
|
||||
|
||||
async@^3.2.3, async@~3.2.0:
|
||||
- version "3.2.5"
|
||||
+ version "3.2.6"
|
||||
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
|
||||
+ integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
|
||||
|
||||
autoprefixer@9.8:
|
||||
version "9.8.8"
|
||||
@@ -155,33 +217,48 @@ brace-expansion@^1.1.7:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
-braces@^3.0.2:
|
||||
- version "3.0.2"
|
||||
+braces@^3.0.3:
|
||||
+ version "3.0.3"
|
||||
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
|
||||
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
|
||||
dependencies:
|
||||
- fill-range "^7.0.1"
|
||||
+ fill-range "^7.1.1"
|
||||
|
||||
-browserslist@^4.12.0, "browserslist@>= 4.21.0":
|
||||
- version "4.22.1"
|
||||
+browserslist@^4.12.0:
|
||||
+ version "4.25.1"
|
||||
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.1.tgz#ba9e8e6f298a1d86f829c9b975e07948967bb111"
|
||||
+ integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==
|
||||
dependencies:
|
||||
- caniuse-lite "^1.0.30001541"
|
||||
- electron-to-chromium "^1.4.535"
|
||||
- node-releases "^2.0.13"
|
||||
- update-browserslist-db "^1.0.13"
|
||||
+ caniuse-lite "^1.0.30001726"
|
||||
+ electron-to-chromium "^1.5.173"
|
||||
+ node-releases "^2.0.19"
|
||||
+ update-browserslist-db "^1.1.3"
|
||||
|
||||
bytes@1:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz"
|
||||
integrity sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==
|
||||
|
||||
-call-bind@^1.0.0:
|
||||
- version "1.0.5"
|
||||
+call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
|
||||
+ version "1.0.2"
|
||||
+ resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
|
||||
+ integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
|
||||
dependencies:
|
||||
+ es-errors "^1.3.0"
|
||||
function-bind "^1.1.2"
|
||||
- get-intrinsic "^1.2.1"
|
||||
- set-function-length "^1.1.1"
|
||||
|
||||
-caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001541:
|
||||
- version "1.0.30001561"
|
||||
+call-bound@^1.0.2:
|
||||
+ version "1.0.4"
|
||||
+ resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
|
||||
+ integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
|
||||
+ dependencies:
|
||||
+ call-bind-apply-helpers "^1.0.2"
|
||||
+ get-intrinsic "^1.3.0"
|
||||
+
|
||||
+caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001726:
|
||||
+ version "1.0.30001731"
|
||||
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz#277c07416ea4613ec564e5b0ffb47e7b60f32e2f"
|
||||
+ integrity sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==
|
||||
|
||||
chalk@^1.1.1:
|
||||
version "1.1.3"
|
||||
@@ -241,16 +318,16 @@ color-convert@^2.0.1:
|
||||
dependencies:
|
||||
color-name "~1.1.4"
|
||||
|
||||
-color-name@~1.1.4:
|
||||
- version "1.1.4"
|
||||
- resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
|
||||
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
-
|
||||
color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
|
||||
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
|
||||
|
||||
+color-name@~1.1.4:
|
||||
+ version "1.1.4"
|
||||
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
|
||||
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
+
|
||||
colors@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz"
|
||||
@@ -278,13 +355,6 @@ debug@^3.1.0:
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
-define-data-property@^1.1.1:
|
||||
- version "1.1.1"
|
||||
- dependencies:
|
||||
- get-intrinsic "^1.2.1"
|
||||
- gopd "^1.0.1"
|
||||
- has-property-descriptors "^1.0.0"
|
||||
-
|
||||
delegate@^3.1.2:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz"
|
||||
@@ -310,13 +380,24 @@ dropzone@5.9:
|
||||
resolved "https://registry.npmjs.org/dropzone/-/dropzone-5.9.3.tgz"
|
||||
integrity sha512-Azk8kD/2/nJIuVPK+zQ9sjKMRIpRvNyqn9XwbBHNq+iNuSccbJS6hwm1Woy0pMST0erSo0u4j+KJaodndDk4vA==
|
||||
|
||||
+dunder-proto@^1.0.1:
|
||||
+ version "1.0.1"
|
||||
+ resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
|
||||
+ integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
|
||||
+ dependencies:
|
||||
+ call-bind-apply-helpers "^1.0.1"
|
||||
+ es-errors "^1.3.0"
|
||||
+ gopd "^1.2.0"
|
||||
+
|
||||
duplexer@^0.1.1:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz"
|
||||
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
|
||||
|
||||
-electron-to-chromium@^1.4.535:
|
||||
- version "1.4.576"
|
||||
+electron-to-chromium@^1.5.173:
|
||||
+ version "1.5.198"
|
||||
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.198.tgz#ac12b539ac1bb3dece1a4cd2d8882d0349c71c55"
|
||||
+ integrity sha512-G5COfnp3w+ydVu80yprgWSfmfQaYRh9DOxfhAxstLyetKaLyl55QrNjx8C38Pc/C+RaDmb1M0Lk8wPEMQ+bGgQ==
|
||||
|
||||
error@^7.0.0:
|
||||
version "7.2.1"
|
||||
@@ -325,8 +406,27 @@ error@^7.0.0:
|
||||
dependencies:
|
||||
string-template "~0.2.1"
|
||||
|
||||
-escalade@^3.1.1:
|
||||
- version "3.1.1"
|
||||
+es-define-property@^1.0.1:
|
||||
+ version "1.0.1"
|
||||
+ resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
|
||||
+ integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
|
||||
+
|
||||
+es-errors@^1.3.0:
|
||||
+ version "1.3.0"
|
||||
+ resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
|
||||
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
|
||||
+
|
||||
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
|
||||
+ version "1.1.1"
|
||||
+ resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
|
||||
+ integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
|
||||
+ dependencies:
|
||||
+ es-errors "^1.3.0"
|
||||
+
|
||||
+escalade@^3.2.0:
|
||||
+ version "3.2.0"
|
||||
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
|
||||
+ integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
|
||||
|
||||
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
@@ -379,8 +479,10 @@ file-sync-cmp@^0.1.0:
|
||||
resolved "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz"
|
||||
integrity sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==
|
||||
|
||||
-fill-range@^7.0.1:
|
||||
- version "7.0.1"
|
||||
+fill-range@^7.1.1:
|
||||
+ version "7.1.1"
|
||||
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
|
||||
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
|
||||
dependencies:
|
||||
to-regex-range "^5.0.1"
|
||||
|
||||
@@ -461,13 +563,29 @@ gaze@^1.1.0:
|
||||
dependencies:
|
||||
globule "^1.0.0"
|
||||
|
||||
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2:
|
||||
- version "1.2.2"
|
||||
+get-intrinsic@^1.2.5, get-intrinsic@^1.3.0:
|
||||
+ version "1.3.0"
|
||||
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
|
||||
+ integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
|
||||
dependencies:
|
||||
+ call-bind-apply-helpers "^1.0.2"
|
||||
+ es-define-property "^1.0.1"
|
||||
+ es-errors "^1.3.0"
|
||||
+ es-object-atoms "^1.1.1"
|
||||
function-bind "^1.1.2"
|
||||
- has-proto "^1.0.1"
|
||||
- has-symbols "^1.0.3"
|
||||
- hasown "^2.0.0"
|
||||
+ get-proto "^1.0.1"
|
||||
+ gopd "^1.2.0"
|
||||
+ has-symbols "^1.1.0"
|
||||
+ hasown "^2.0.2"
|
||||
+ math-intrinsics "^1.1.0"
|
||||
+
|
||||
+get-proto@^1.0.1:
|
||||
+ version "1.0.1"
|
||||
+ resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
|
||||
+ integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
|
||||
+ dependencies:
|
||||
+ dunder-proto "^1.0.1"
|
||||
+ es-object-atoms "^1.0.0"
|
||||
|
||||
getobject@~1.0.0:
|
||||
version "1.0.2"
|
||||
@@ -486,19 +604,7 @@ glob@^7.1.3:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
-glob@~7.1.1:
|
||||
- version "7.1.7"
|
||||
- resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz"
|
||||
- integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
|
||||
- dependencies:
|
||||
- fs.realpath "^1.0.0"
|
||||
- inflight "^1.0.4"
|
||||
- inherits "2"
|
||||
- minimatch "^3.0.4"
|
||||
- once "^1.3.0"
|
||||
- path-is-absolute "^1.0.0"
|
||||
-
|
||||
-glob@~7.1.6:
|
||||
+glob@~7.1.1, glob@~7.1.6:
|
||||
version "7.1.7"
|
||||
resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz"
|
||||
integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
|
||||
@@ -546,10 +652,10 @@ good-listener@^1.2.2:
|
||||
dependencies:
|
||||
delegate "^3.1.2"
|
||||
|
||||
-gopd@^1.0.1:
|
||||
- version "1.0.1"
|
||||
- dependencies:
|
||||
- get-intrinsic "^1.1.3"
|
||||
+gopd@^1.2.0:
|
||||
+ version "1.2.0"
|
||||
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
|
||||
+ integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
|
||||
|
||||
grunt-cli@~1.4.3:
|
||||
version "1.4.3"
|
||||
@@ -656,7 +762,7 @@ grunt-sass@3.1:
|
||||
resolved "https://registry.npmjs.org/grunt-sass/-/grunt-sass-3.1.0.tgz"
|
||||
integrity sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A==
|
||||
|
||||
-grunt@>=0.4.5, grunt@>=1, grunt@>=1.4.1, grunt@1.6:
|
||||
+grunt@1.6:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz"
|
||||
integrity sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==
|
||||
@@ -700,21 +806,15 @@ has-flag@^4.0.0:
|
||||
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
|
||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||
|
||||
-has-property-descriptors@^1.0.0:
|
||||
- version "1.0.1"
|
||||
- dependencies:
|
||||
- get-intrinsic "^1.2.2"
|
||||
-
|
||||
-has-proto@^1.0.1:
|
||||
- version "1.0.1"
|
||||
-
|
||||
-has-symbols@^1.0.3:
|
||||
- version "1.0.3"
|
||||
- resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
|
||||
- integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
|
||||
+has-symbols@^1.1.0:
|
||||
+ version "1.1.0"
|
||||
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
|
||||
+ integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
|
||||
|
||||
-hasown@^2.0.0:
|
||||
- version "2.0.0"
|
||||
+hasown@^2.0.2:
|
||||
+ version "2.0.2"
|
||||
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
|
||||
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
|
||||
dependencies:
|
||||
function-bind "^1.1.2"
|
||||
|
||||
@@ -784,9 +884,11 @@ is-absolute@^1.0.0:
|
||||
is-windows "^1.0.1"
|
||||
|
||||
is-core-module@^2.13.0:
|
||||
- version "2.13.1"
|
||||
+ version "2.16.1"
|
||||
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
|
||||
+ integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
|
||||
dependencies:
|
||||
- hasown "^2.0.0"
|
||||
+ hasown "^2.0.2"
|
||||
|
||||
is-extglob@^2.1.1:
|
||||
version "2.1.1"
|
||||
@@ -848,7 +950,7 @@ jquery-ui@1.14:
|
||||
dependencies:
|
||||
jquery ">=1.12.0 <5.0.0"
|
||||
|
||||
-"jquery@>=1.12.0 <5.0.0", "jquery@>=3.4.0 <4.0.0", jquery@3.7:
|
||||
+jquery@3.7, "jquery@>=1.12.0 <5.0.0", "jquery@>=3.4.0 <4.0.0":
|
||||
version "3.7.1"
|
||||
resolved "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz"
|
||||
integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
|
||||
@@ -925,6 +1027,11 @@ map-cache@^0.2.0:
|
||||
resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz"
|
||||
integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==
|
||||
|
||||
+math-intrinsics@^1.1.0:
|
||||
+ version "1.1.0"
|
||||
+ resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
|
||||
+ integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
|
||||
+
|
||||
maxmin@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz"
|
||||
@@ -936,9 +1043,11 @@ maxmin@^3.0.0:
|
||||
pretty-bytes "^5.3.0"
|
||||
|
||||
micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
|
||||
- version "4.0.5"
|
||||
+ version "4.0.8"
|
||||
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
|
||||
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
|
||||
dependencies:
|
||||
- braces "^3.0.2"
|
||||
+ braces "^3.0.3"
|
||||
picomatch "^2.3.1"
|
||||
|
||||
minimatch@^3.0.4, minimatch@^3.1.1:
|
||||
@@ -948,14 +1057,7 @@ minimatch@^3.0.4, minimatch@^3.1.1:
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
-minimatch@~3.0.2:
|
||||
- version "3.0.8"
|
||||
- resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz"
|
||||
- integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==
|
||||
- dependencies:
|
||||
- brace-expansion "^1.1.7"
|
||||
-
|
||||
-minimatch@~3.0.4:
|
||||
+minimatch@~3.0.2, minimatch@~3.0.4:
|
||||
version "3.0.8"
|
||||
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz"
|
||||
integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==
|
||||
@@ -979,15 +1081,19 @@ multimatch@^4.0.0:
|
||||
minimatch "^3.0.4"
|
||||
|
||||
nanoid@^3.3.7:
|
||||
- version "3.3.7"
|
||||
+ version "3.3.11"
|
||||
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
|
||||
+ integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
|
||||
|
||||
node-addon-api@^7.0.0:
|
||||
version "7.1.1"
|
||||
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz"
|
||||
integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
|
||||
|
||||
-node-releases@^2.0.13:
|
||||
- version "2.0.13"
|
||||
+node-releases@^2.0.19:
|
||||
+ version "2.0.19"
|
||||
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
|
||||
+ integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
|
||||
|
||||
nopt@~3.0.6:
|
||||
version "3.0.6"
|
||||
@@ -1019,8 +1125,10 @@ object-assign@^4.1.0:
|
||||
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
|
||||
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
||||
|
||||
-object-inspect@^1.9.0:
|
||||
- version "1.13.1"
|
||||
+object-inspect@^1.13.3:
|
||||
+ version "1.13.4"
|
||||
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
|
||||
+ integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
|
||||
|
||||
object.defaults@^1.1.0:
|
||||
version "1.1.0"
|
||||
@@ -1137,12 +1245,9 @@ picocolors@^0.2.1:
|
||||
resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz"
|
||||
integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
|
||||
|
||||
-picocolors@^1.0.0:
|
||||
- version "1.0.0"
|
||||
-
|
||||
-picocolors@^1.1.0:
|
||||
+picocolors@^1.1.1:
|
||||
version "1.1.1"
|
||||
- resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
|
||||
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||
|
||||
picomatch@^2.3.1:
|
||||
@@ -1167,6 +1272,15 @@ postcss-value-parser@^4.1.0:
|
||||
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
|
||||
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||
|
||||
+postcss@8.4:
|
||||
+ version "8.4.49"
|
||||
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19"
|
||||
+ integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==
|
||||
+ dependencies:
|
||||
+ nanoid "^3.3.7"
|
||||
+ picocolors "^1.1.1"
|
||||
+ source-map-js "^1.2.1"
|
||||
+
|
||||
postcss@^6.0.11:
|
||||
version "6.0.23"
|
||||
resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz"
|
||||
@@ -1184,22 +1298,17 @@ postcss@^7.0.32:
|
||||
picocolors "^0.2.1"
|
||||
source-map "^0.6.1"
|
||||
|
||||
-postcss@8.4:
|
||||
- version "8.4.47"
|
||||
- dependencies:
|
||||
- nanoid "^3.3.7"
|
||||
- picocolors "^1.1.0"
|
||||
- source-map-js "^1.2.1"
|
||||
-
|
||||
pretty-bytes@^5.3.0:
|
||||
version "5.6.0"
|
||||
resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz"
|
||||
integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
|
||||
|
||||
qs@^6.4.0:
|
||||
- version "6.11.2"
|
||||
+ version "6.14.0"
|
||||
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930"
|
||||
+ integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==
|
||||
dependencies:
|
||||
- side-channel "^1.0.4"
|
||||
+ side-channel "^1.1.0"
|
||||
|
||||
raw-body@~1.1.0:
|
||||
version "1.1.7"
|
||||
@@ -1283,32 +1392,57 @@ sass@^1.89.2:
|
||||
optionalDependencies:
|
||||
"@parcel/watcher" "^2.4.1"
|
||||
|
||||
+select2@4.1.0-rc.0:
|
||||
+ version "4.1.0-rc.0"
|
||||
+ resolved "https://registry.npmjs.org/select2/-/select2-4.1.0-rc.0.tgz"
|
||||
+ integrity sha512-Hr9TdhyHCZUtwznEH2CBf7967mEM0idtJ5nMtjvk3Up5tPukOLXbHUNmh10oRfeNIhj+3GD3niu+g6sVK+gK0A==
|
||||
+
|
||||
select@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/select/-/select-1.1.2.tgz"
|
||||
integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==
|
||||
|
||||
-select2@4.1.0-rc.0:
|
||||
- version "4.1.0-rc.0"
|
||||
- resolved "https://registry.npmjs.org/select2/-/select2-4.1.0-rc.0.tgz"
|
||||
- integrity sha512-Hr9TdhyHCZUtwznEH2CBf7967mEM0idtJ5nMtjvk3Up5tPukOLXbHUNmh10oRfeNIhj+3GD3niu+g6sVK+gK0A==
|
||||
+side-channel-list@^1.0.0:
|
||||
+ version "1.0.0"
|
||||
+ resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
|
||||
+ integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
|
||||
+ dependencies:
|
||||
+ es-errors "^1.3.0"
|
||||
+ object-inspect "^1.13.3"
|
||||
|
||||
-set-function-length@^1.1.1:
|
||||
- version "1.1.1"
|
||||
+side-channel-map@^1.0.1:
|
||||
+ version "1.0.1"
|
||||
+ resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42"
|
||||
+ integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
|
||||
dependencies:
|
||||
- define-data-property "^1.1.1"
|
||||
- get-intrinsic "^1.2.1"
|
||||
- gopd "^1.0.1"
|
||||
- has-property-descriptors "^1.0.0"
|
||||
+ call-bound "^1.0.2"
|
||||
+ es-errors "^1.3.0"
|
||||
+ get-intrinsic "^1.2.5"
|
||||
+ object-inspect "^1.13.3"
|
||||
|
||||
-side-channel@^1.0.4:
|
||||
- version "1.0.4"
|
||||
+side-channel-weakmap@^1.0.2:
|
||||
+ version "1.0.2"
|
||||
+ resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea"
|
||||
+ integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
|
||||
+ dependencies:
|
||||
+ call-bound "^1.0.2"
|
||||
+ es-errors "^1.3.0"
|
||||
+ get-intrinsic "^1.2.5"
|
||||
+ object-inspect "^1.13.3"
|
||||
+ side-channel-map "^1.0.1"
|
||||
+
|
||||
+side-channel@^1.1.0:
|
||||
+ version "1.1.0"
|
||||
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
|
||||
+ integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
|
||||
dependencies:
|
||||
- call-bind "^1.0.0"
|
||||
- get-intrinsic "^1.0.2"
|
||||
- object-inspect "^1.9.0"
|
||||
+ es-errors "^1.3.0"
|
||||
+ object-inspect "^1.13.3"
|
||||
+ side-channel-list "^1.0.0"
|
||||
+ side-channel-map "^1.0.1"
|
||||
+ side-channel-weakmap "^1.0.2"
|
||||
|
||||
-source-map-js@^1.2.1, "source-map-js@>=0.6.2 <2.0.0":
|
||||
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
|
||||
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
|
||||
@@ -1333,16 +1467,16 @@ sprintf-js@~1.0.2:
|
||||
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
|
||||
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
|
||||
|
||||
-string_decoder@0.10:
|
||||
- version "0.10.31"
|
||||
- resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
|
||||
- integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
|
||||
-
|
||||
string-template@~0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz"
|
||||
integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==
|
||||
|
||||
+string_decoder@0.10:
|
||||
+ version "0.10.31"
|
||||
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
|
||||
+ integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
|
||||
+
|
||||
strip-ansi@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
|
||||
@@ -1399,7 +1533,9 @@ to-regex-range@^5.0.1:
|
||||
is-number "^7.0.0"
|
||||
|
||||
uglify-js@^3.16.1:
|
||||
- version "3.17.4"
|
||||
+ version "3.19.3"
|
||||
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f"
|
||||
+ integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==
|
||||
|
||||
unc-path-regex@^0.1.2:
|
||||
version "0.1.2"
|
||||
@@ -1414,11 +1550,13 @@ underscore.string@~3.3.5:
|
||||
sprintf-js "^1.1.1"
|
||||
util-deprecate "^1.0.2"
|
||||
|
||||
-update-browserslist-db@^1.0.13:
|
||||
- version "1.0.13"
|
||||
+update-browserslist-db@^1.1.3:
|
||||
+ version "1.1.3"
|
||||
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
|
||||
+ integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
|
||||
dependencies:
|
||||
- escalade "^3.1.1"
|
||||
- picocolors "^1.0.0"
|
||||
+ escalade "^3.2.0"
|
||||
+ picocolors "^1.1.1"
|
||||
|
||||
uri-path@^1.0.0:
|
||||
version "1.0.0"
|
||||
@@ -0,0 +1,34 @@
|
||||
From e404c835ae6681287f0d0ba005e43732becf8e9e Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Heinrich <onny@project-insanity.org>
|
||||
Date: Sun, 17 Aug 2025 09:54:41 +0200
|
||||
Subject: [PATCH] composer.json omit version string
|
||||
|
||||
---
|
||||
composer.json | 1 -
|
||||
composer.lock | 2 +-
|
||||
2 files changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/composer.json b/composer.json
|
||||
index 4ae0b32b7..241d59be9 100644
|
||||
--- a/composer.json
|
||||
+++ b/composer.json
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"name": "invoiceplane/invoiceplane",
|
||||
- "version": "1.6.3-rc1",
|
||||
"description": "InvoicePlane is a self-hosted open source application for managing your invoices, clients and payments",
|
||||
"homepage": "https://invoiceplane.com",
|
||||
"license": "MIT",
|
||||
diff --git a/composer.lock b/composer.lock
|
||||
index 46fae450e..cf4aa24c1 100644
|
||||
--- a/composer.lock
|
||||
+++ b/composer.lock
|
||||
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
- "content-hash": "6920f42f5773c5e01f9f107ebcedb891",
|
||||
+ "content-hash": "16ec29d674456761958ca1c78513c3c5",
|
||||
"packages": [
|
||||
{
|
||||
"name": "bacon/bacon-qr-code",
|
||||
File diff suppressed because it is too large
Load Diff
@@ -12,12 +12,12 @@
|
||||
fetchzip,
|
||||
}:
|
||||
let
|
||||
version = "1.6.2";
|
||||
version = "1.6.3";
|
||||
# Fetch release tarball which contains language files
|
||||
# https://github.com/InvoicePlane/InvoicePlane/issues/1170
|
||||
languages = fetchzip {
|
||||
url = "https://github.com/InvoicePlane/InvoicePlane/releases/download/v${version}/v${version}.zip";
|
||||
hash = "sha256-ME8ornP2uevvH8DzuI25Z8OV0EP98CBgbunvb2Hbr9M=";
|
||||
hash = "sha256-MuqxbkayW3GeiaorxfZSJtlwCWvnIF2ED/UUqahyoIQ=";
|
||||
};
|
||||
in
|
||||
php.buildComposerProject2 (finalAttrs: {
|
||||
@@ -28,16 +28,19 @@ php.buildComposerProject2 (finalAttrs: {
|
||||
owner = "InvoicePlane";
|
||||
repo = "InvoicePlane";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-E2TZ/FhlVKZpGuczXb/QLn27gGiO7YYlAkPSolTEoeQ=";
|
||||
hash = "sha256-XNjdFWP5AEulbPZcMDXYSdDhaLWlgu3nnCSFnjUjGpk=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Node-sass is deprecated and fails to cross-compile
|
||||
# See: https://github.com/InvoicePlane/InvoicePlane/issues/1275
|
||||
./node_switch_to_sass.patch
|
||||
# yarn.lock missing some resolved attributes and fails
|
||||
./fix-yarn-lock.patch
|
||||
|
||||
# Fix composer.json validation
|
||||
# See https://github.com/InvoicePlane/InvoicePlane/pull/1306
|
||||
./fix_composer_validation.patch
|
||||
];
|
||||
|
||||
vendorHash = "sha256-eq3YKIZZzZihDYgFH3YTETHvNG6hAE/oJ5Ul2XRMn4U=";
|
||||
vendorHash = "sha256-qnWLcEabQpu0Yp4Q2NWQm4XFV4YW679cvXo6p/dDECI=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
yarnConfigHook
|
||||
@@ -49,12 +52,9 @@ php.buildComposerProject2 (finalAttrs: {
|
||||
|
||||
offlineCache = fetchYarnDeps {
|
||||
inherit (finalAttrs) src patches;
|
||||
hash = "sha256-qAm4HnZwfwfjv7LqG+skmFLTHCSJKWH8iRDWFFebXEs=";
|
||||
hash = "sha256-0fPdxOIeQBTulPUxHtaQylm4jevQTONSN1bChqbGbGs=";
|
||||
};
|
||||
|
||||
# Upstream composer.json file is missing the name, description and license fields
|
||||
composerStrictValidation = false;
|
||||
|
||||
postBuild = ''
|
||||
grunt build
|
||||
'';
|
||||
|
||||
@@ -48,7 +48,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
description = "Set of nine separate and highly configurable menu items that let you know exactly what's going on inside your Mac";
|
||||
homepage = "https://bjango.com/mac/istatmenus/";
|
||||
license = lib.licenses.unfree;
|
||||
maintainers = with lib.maintainers; [ donteatoreo ];
|
||||
maintainers = with lib.maintainers; [ FlameFlag ];
|
||||
platforms = lib.platforms.darwin;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
};
|
||||
|
||||
@@ -27,7 +27,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
description = "Tiny menu bar calendar";
|
||||
homepage = "https://www.mowglii.com/itsycal/";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ donteatoreo ];
|
||||
maintainers = with lib.maintainers; [ FlameFlag ];
|
||||
platforms = lib.platforms.darwin;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
};
|
||||
|
||||
@@ -126,7 +126,7 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
||||
mainProgram = "koboldcpp";
|
||||
maintainers = with lib.maintainers; [
|
||||
maxstrid
|
||||
donteatoreo
|
||||
FlameFlag
|
||||
];
|
||||
platforms = lib.platforms.unix;
|
||||
};
|
||||
|
||||
@@ -33,13 +33,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "ladybird";
|
||||
version = "0-unstable-2025-08-11";
|
||||
version = "0-unstable-2025-08-19";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "LadybirdWebBrowser";
|
||||
repo = "ladybird";
|
||||
rev = "a64cee528c5b387d45441da80f6c887399d4affb";
|
||||
hash = "sha256-YtWh5Unny3IU0+81N8riGDJJAtethO1g04cxNap520s=";
|
||||
rev = "658477620afe4c14b936227d1c8307b2dea56267";
|
||||
hash = "sha256-WkEgZP5Ci0mlNDGq++93v4coz36dhp+kXtlKQu1xnVM=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -73,7 +73,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
license = licenses.lgpl3;
|
||||
maintainers = with maintainers; [
|
||||
ilys
|
||||
donteatoreo
|
||||
FlameFlag
|
||||
];
|
||||
};
|
||||
})
|
||||
|
||||
@@ -26,7 +26,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
description = "Cursor manager for macOS built using private, nonintrusive CoreGraphics APIs";
|
||||
homepage = "https://github.com/alexzielenski/Mousecape";
|
||||
license = lib.licenses.free;
|
||||
maintainers = with lib.maintainers; [ donteatoreo ];
|
||||
maintainers = with lib.maintainers; [ FlameFlag ];
|
||||
platforms = lib.platforms.darwin;
|
||||
sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
|
||||
};
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
}:
|
||||
|
||||
let
|
||||
version = "5.8.4";
|
||||
version = "5.9.15";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "d99kris";
|
||||
repo = "nchat";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-PfiTIq8xomqp4ewawbX56hFgA4x5z8SI2w9husMtZPc=";
|
||||
hash = "sha256-I7A6+zhHXE+LSfqnWESsXF1U4Y0Bw1Vt7gZblRqWSMQ=";
|
||||
};
|
||||
|
||||
libcgowm = buildGoModule {
|
||||
@@ -29,7 +29,7 @@ let
|
||||
inherit version src;
|
||||
|
||||
sourceRoot = "${src.name}/lib/wmchat/go";
|
||||
vendorHash = "sha256-HC7tJRk7Pqw3AUDEP2fGqYQLjIGf0CgB36K3PBYsBMM=";
|
||||
vendorHash = "sha256-rovzblnXfDDyWyYR3G9irFaSopiZSeax+48R/vD/ktY=";
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
Generated
-5
@@ -909,11 +909,6 @@
|
||||
"version": "7.0.0",
|
||||
"hash": "sha256-1e031E26iraIqun84ad0fCIR4MJZ1hcQo4yFN+B7UfE="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Bcl.AsyncInterfaces",
|
||||
"version": "8.0.0",
|
||||
"hash": "sha256-9aWmiwMJKrKr9ohD1KSuol37y+jdDxPGJct3m2/Bknw="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Build.Tasks.Git",
|
||||
"version": "8.0.0",
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
{ fetchurl }:
|
||||
let
|
||||
release = "ved4b249e2c35952c";
|
||||
owner = "Nexus-Mods";
|
||||
repo = "game-hashes";
|
||||
repoURL = "https://github.com/${owner}/${repo}";
|
||||
|
||||
# Define a binding so that `update-source-version` can find it
|
||||
src = fetchurl {
|
||||
url = "${repoURL}/releases/download/${release}/game_hashes_db.zip";
|
||||
hash = "sha256-9xJ8yfLRkIV0o++NHK2igd2l83/tsgWc5cuwZO2zseY=";
|
||||
passthru = {
|
||||
inherit
|
||||
src # Also for `update-source-version` support
|
||||
release
|
||||
owner
|
||||
repo
|
||||
repoURL
|
||||
;
|
||||
};
|
||||
};
|
||||
in
|
||||
src
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p bash common-updater-scripts gh
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
# Set a default attrpath to allow running this update script directly
|
||||
export UPDATE_NIX_ATTR_PATH="${UPDATE_NIX_ATTR_PATH:-"nexusmods-app.gameHashes"}"
|
||||
|
||||
self=$(realpath "$0")
|
||||
dir=$(dirname "$self")
|
||||
cd "$dir"/../../../../../
|
||||
|
||||
old_release=$(
|
||||
nix-instantiate --eval --raw \
|
||||
--attr "$UPDATE_NIX_ATTR_PATH.release"
|
||||
)
|
||||
|
||||
echo "Looking up latest game_hashes_db" >&2
|
||||
new_release=$(
|
||||
gh --repo Nexus-Mods/game-hashes \
|
||||
release list \
|
||||
--limit 1 \
|
||||
--exclude-drafts \
|
||||
--exclude-pre-releases \
|
||||
--json tagName \
|
||||
--jq .[].tagName
|
||||
)
|
||||
|
||||
echo "Latest release is $new_release" >&2
|
||||
|
||||
if [ "$old_release" = "$new_release" ]; then
|
||||
echo "Already up to date"
|
||||
exit
|
||||
fi
|
||||
|
||||
old_release_escaped=$(echo "$old_release" | sed 's#[$^*\\.[|]#\\&#g')
|
||||
new_release_escaped=$(echo "$new_release" | sed 's#[$^*\\.[|]#\\&#g')
|
||||
url=$(
|
||||
nix-instantiate --eval --raw --attr "$UPDATE_NIX_ATTR_PATH.url" |
|
||||
sed "s|$old_release_escaped|$new_release_escaped|"
|
||||
)
|
||||
|
||||
echo "Downloading and hashing game_hashes_db" >&2
|
||||
hash=$(
|
||||
nix --extra-experimental-features nix-command \
|
||||
hash convert --hash-algo sha256 --to sri \
|
||||
"$(nix-prefetch-url "$url" --type sha256)"
|
||||
)
|
||||
|
||||
echo "Updating source" >&2
|
||||
update-source-version \
|
||||
"$UPDATE_NIX_ATTR_PATH" \
|
||||
"$new_release" \
|
||||
"$hash" \
|
||||
--version-key=release \
|
||||
--file="$dir"/default.nix
|
||||
@@ -2,13 +2,13 @@
|
||||
_7zz,
|
||||
avalonia,
|
||||
buildDotnetModule,
|
||||
callPackage,
|
||||
desktop-file-utils,
|
||||
dotnetCorePackages,
|
||||
fetchgit,
|
||||
imagemagick,
|
||||
lib,
|
||||
xdg-utils,
|
||||
nix-update-script,
|
||||
pname ? "nexusmods-app",
|
||||
}:
|
||||
let
|
||||
@@ -23,15 +23,17 @@ let
|
||||
in
|
||||
buildDotnetModule (finalAttrs: {
|
||||
inherit pname;
|
||||
version = "0.14.3";
|
||||
version = "0.15.2";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://github.com/Nexus-Mods/NexusMods.App.git";
|
||||
rev = "refs/tags/v${finalAttrs.version}";
|
||||
hash = "sha256-B2gIRVeaTwYEnESMovwEJgdmLwRNA7/nJs7opNhiyyA=";
|
||||
hash = "sha256-WI6ulYDPOBGGt3snimCHswuIaII1aWNT/TZqvJxrQRQ=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
gameHashes = callPackage ./game-hashes { };
|
||||
|
||||
enableParallelBuilding = false;
|
||||
|
||||
# If the whole solution is published, there seems to be a race condition where
|
||||
@@ -63,9 +65,18 @@ buildDotnetModule (finalAttrs: {
|
||||
# for some reason these tests fail (intermittently?) with a zero timestamp
|
||||
touch tests/NexusMods.UI.Tests/WorkspaceSystem/*.verified.png
|
||||
|
||||
# Assertion assumes version is set to 0.0.1
|
||||
substituteInPlace tests/NexusMods.Telemetry.Tests/TrackingDataSenderTests.cs \
|
||||
--replace-fail 'cra_ct=v0.0.1' 'cra_ct=v${finalAttrs.version}'
|
||||
# Specify a fixed date to improve build reproducibility
|
||||
echo "1970-01-01T00:00:00Z" >buildDate.txt
|
||||
substituteInPlace src/NexusMods.Sdk/NexusMods.Sdk.csproj \
|
||||
--replace-fail '$(BaseIntermediateOutputPath)buildDate.txt' "$(realpath buildDate.txt)"
|
||||
|
||||
# Use a pinned version of the game hashes db
|
||||
substituteInPlace src/NexusMods.Games.FileHashes/NexusMods.Games.FileHashes.csproj \
|
||||
--replace-fail '$(BaseIntermediateOutputPath)games_hashes_db.zip' "$gameHashes"
|
||||
|
||||
# Use a vendored version of the nexus API's games.json data
|
||||
substituteInPlace src/NexusMods.Networking.NexusWebApi/NexusMods.Networking.NexusWebApi.csproj \
|
||||
--replace-fail '$(BaseIntermediateOutputPath)games.json' ${./vendored/games.json}
|
||||
'';
|
||||
|
||||
makeWrapperArgs = [
|
||||
@@ -127,6 +138,7 @@ buildDotnetModule (finalAttrs: {
|
||||
|
||||
dotnetTestFlags = [
|
||||
"--environment=USER=nobody"
|
||||
"--property:Version=${finalAttrs.version}"
|
||||
"--property:DefineConstants=${lib.strings.concatStringsSep "%3B" constants}"
|
||||
];
|
||||
|
||||
@@ -137,19 +149,9 @@ buildDotnetModule (finalAttrs: {
|
||||
];
|
||||
|
||||
disabledTests = [
|
||||
# Fails attempting to download game hashes DB from github:
|
||||
# HttpRequestException : Resource temporarily unavailable (github.com:443)
|
||||
"NexusMods.DataModel.SchemaVersions.Tests.LegacyDatabaseSupportTests.TestDatabase"
|
||||
"NexusMods.DataModel.SchemaVersions.Tests.MigrationSpecificTests.TestsFor_0001_ConvertTimestamps.OldTimestampsAreInRange"
|
||||
"NexusMods.DataModel.SchemaVersions.Tests.MigrationSpecificTests.TestsFor_0003_FixDuplicates.No_Duplicates"
|
||||
"NexusMods.DataModel.SchemaVersions.Tests.MigrationSpecificTests.TestsFor_0004_RemoveGameFiles.Test"
|
||||
|
||||
# Fails attempting to fetch SMAPI version data from github:
|
||||
# https://github.com/erri120/smapi-versions/raw/main/data/game-smapi-versions.json
|
||||
"NexusMods.Games.StardewValley.Tests.SMAPIGameVersionDiagnosticEmitterTests.Test_TryGetLastSupportedSMAPIVersion"
|
||||
|
||||
# Fails attempting to fetch game info from NexusMods API
|
||||
"NexusMods.Networking.NexusWebApi.Tests.LocalMappingCacheTests.Test_Parse"
|
||||
]
|
||||
++ lib.optionals (!_7zz.meta.unfree) [
|
||||
"NexusMods.Games.FOMOD.Tests.FomodXmlInstallerTests.InstallsFilesSimple_UsingRar"
|
||||
@@ -189,12 +191,12 @@ buildDotnetModule (finalAttrs: {
|
||||
};
|
||||
};
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
passthru.updateScript = ./update.sh;
|
||||
|
||||
meta = {
|
||||
mainProgram = "NexusMods.App";
|
||||
homepage = "https://github.com/Nexus-Mods/NexusMods.App";
|
||||
changelog = "https://github.com/Nexus-Mods/NexusMods.App/releases/tag/${finalAttrs.src.rev}";
|
||||
changelog = "https://github.com/Nexus-Mods/NexusMods.App/releases/tag/v${finalAttrs.version}";
|
||||
license = [ lib.licenses.gpl3Plus ];
|
||||
maintainers = with lib.maintainers; [
|
||||
l0b0
|
||||
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p bash nix-update
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
# Set a default attrpath to allow running this update script directly
|
||||
export UPDATE_NIX_ATTR_PATH="${UPDATE_NIX_ATTR_PATH:-"nexusmods-app"}"
|
||||
|
||||
self=$(realpath "$0")
|
||||
dir=$(dirname "$self")
|
||||
cd "$dir"/../../../../
|
||||
|
||||
# Update vendored files
|
||||
"$dir"/vendored/update.sh
|
||||
|
||||
# Update game_hashes_db
|
||||
UPDATE_NIX_ATTR_PATH="$UPDATE_NIX_ATTR_PATH.gameHashes" \
|
||||
"$dir"/game-hashes/update.sh
|
||||
|
||||
url=$(
|
||||
nix-instantiate --eval --raw \
|
||||
--attr "$UPDATE_NIX_ATTR_PATH.meta.homepage"
|
||||
)
|
||||
nix-update --url "$url"
|
||||
@@ -0,0 +1,31 @@
|
||||
This directory contains a vendored copy of `games.json`, along with tooling to generate it.
|
||||
|
||||
## Purpose
|
||||
|
||||
The games data is fetched at runtime by NexusMods.App, however it is also included at build time for two reasons:
|
||||
|
||||
1. It allows tests to run against real data.
|
||||
2. It is used as cached data, speeding up the app's initial run.
|
||||
|
||||
It is not vital for the file to contain all games, however ideally it should contain all games _supported_ by this version of NexusMods.App.
|
||||
That way the initial run's cached data is more useful.
|
||||
|
||||
If this file grows too large, because we are including too many games, we can patch the `csproj` build spec so that `games.json` is not used at build time.
|
||||
We would also need to patch or disable any tests that rely on it.
|
||||
|
||||
## Generating
|
||||
|
||||
`games.json` is generated automatically by `update.sh`, using data from [nexusmods' API][url] and the games listed in `game-ids.nix`.
|
||||
|
||||
To add a new game to `games.json`:
|
||||
- Inspect the [nexusmods endpoint][url] to find the game's name and ID
|
||||
- Add the name and ID to `game-ids.nix`
|
||||
- Run `update.sh`
|
||||
- Commit the result
|
||||
|
||||
> [!Note]
|
||||
> Running `update.sh` may also update the existing games, so you may wish to create two separate commits using `git add --patch`.
|
||||
> One for updating the existing data and another for adding the new game.
|
||||
|
||||
[url]: https://data.nexusmods.com/file/nexus-data/games.json
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# This file lists games to be included in the vendored games.json file.
|
||||
# It is not critical to include all games, other than those referenced by the test suite.
|
||||
# Ideally, all games supported by the app will be included, as this can improve first-run performance.
|
||||
{
|
||||
# keep-sorted start case=no numeric=yes
|
||||
"Baldur's Gate 3" = 3474;
|
||||
"Cyberpunk 2077" = 3333;
|
||||
"Mount & Blade II: Bannerlord" = 3174;
|
||||
"Stardew Valley" = 1303;
|
||||
# keep-sorted end
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
[
|
||||
{
|
||||
"id": 1303,
|
||||
"name": "Stardew Valley",
|
||||
"name_lower": "stardew valley",
|
||||
"forum_url": "https://forums.nexusmods.com/games/19-stardew-valley/",
|
||||
"nexusmods_url": "https://www.nexusmods.com/stardewvalley",
|
||||
"genre": "Simulation",
|
||||
"file_count": 137612,
|
||||
"downloads": 592183501,
|
||||
"domain_name": "stardewvalley",
|
||||
"approved_date": 1457432329,
|
||||
"mods": 24655,
|
||||
"collections": 3570
|
||||
},
|
||||
{
|
||||
"id": 3174,
|
||||
"name": "Mount & Blade II: Bannerlord",
|
||||
"name_lower": "mount & blade ii: bannerlord",
|
||||
"forum_url": "https://forums.nexusmods.com/games/9-mount-blade-ii-bannerlord/",
|
||||
"nexusmods_url": "https://www.nexusmods.com/mountandblade2bannerlord",
|
||||
"genre": "Strategy",
|
||||
"file_count": 49182,
|
||||
"downloads": 111421397,
|
||||
"domain_name": "mountandblade2bannerlord",
|
||||
"approved_date": 1582898627,
|
||||
"mods": 6136,
|
||||
"collections": 321
|
||||
},
|
||||
{
|
||||
"id": 3333,
|
||||
"name": "Cyberpunk 2077",
|
||||
"name_lower": "cyberpunk 2077",
|
||||
"forum_url": "https://forums.nexusmods.com/games/1-cyberpunk-2077/",
|
||||
"nexusmods_url": "https://www.nexusmods.com/cyberpunk2077",
|
||||
"genre": "Action",
|
||||
"file_count": 118327,
|
||||
"downloads": 825382927,
|
||||
"domain_name": "cyberpunk2077",
|
||||
"approved_date": 1607433331,
|
||||
"mods": 16707,
|
||||
"collections": 1910
|
||||
},
|
||||
{
|
||||
"id": 3474,
|
||||
"name": "Baldur's Gate 3",
|
||||
"name_lower": "baldur's gate 3",
|
||||
"forum_url": "https://forums.nexusmods.com/games/2-baldurs-gate-3/",
|
||||
"nexusmods_url": "https://www.nexusmods.com/baldursgate3",
|
||||
"genre": "RPG",
|
||||
"file_count": 100954,
|
||||
"downloads": 325304689,
|
||||
"domain_name": "baldursgate3",
|
||||
"approved_date": 1602863114,
|
||||
"mods": 14186,
|
||||
"collections": 3703
|
||||
}
|
||||
]
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p bash curl jq
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
url='https://data.nexusmods.com/file/nexus-data/games.json'
|
||||
self=$(realpath "$0")
|
||||
dir=$(dirname "$self")
|
||||
tmp=$(mktemp)
|
||||
|
||||
cd "$dir"/../../../../../
|
||||
|
||||
ids=$(
|
||||
nix-instantiate --eval --json \
|
||||
--argstr file "$dir"/game-ids.nix \
|
||||
--expr '{file}: builtins.attrValues (import file)'
|
||||
)
|
||||
|
||||
echo "Fetching games data" >&2
|
||||
curl "$url" \
|
||||
--silent \
|
||||
--show-error \
|
||||
--location |
|
||||
jq --argjson ids "$ids" \
|
||||
'map(select( .id | IN($ids[]) )) | sort_by(.id)' \
|
||||
>"$tmp"
|
||||
|
||||
echo "Validating result" >&2
|
||||
nix-instantiate --eval --strict \
|
||||
--argstr idsNix "$dir"/game-ids.nix \
|
||||
--argstr gamesJson "$tmp" \
|
||||
--expr '
|
||||
{
|
||||
idsNix,
|
||||
gamesJson,
|
||||
lib ? import <nixpkgs/lib>,
|
||||
}:
|
||||
let
|
||||
ids = import idsNix;
|
||||
games = lib.importJSON gamesJson;
|
||||
in
|
||||
lib.forEach games (
|
||||
{ id, name, ... }:
|
||||
lib.throwIfNot
|
||||
(id == ids.${name})
|
||||
"${name}: id ${toString id} does not match ${toString ids.${name}}"
|
||||
null
|
||||
)
|
||||
' \
|
||||
>/dev/null
|
||||
|
||||
echo "Installing games.json to $dir" >&2
|
||||
mv --force "$tmp" "$dir"/games.json
|
||||
@@ -34,7 +34,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
description = "Beautiful calculator app for macOS";
|
||||
homepage = "https://numi.app/";
|
||||
license = lib.licenses.unfree;
|
||||
maintainers = with lib.maintainers; [ donteatoreo ];
|
||||
maintainers = with lib.maintainers; [ FlameFlag ];
|
||||
platforms = lib.platforms.darwin;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
};
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "orchard";
|
||||
version = "0.37.0";
|
||||
version = "0.38.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cirruslabs";
|
||||
repo = "orchard";
|
||||
rev = version;
|
||||
hash = "sha256-V5pBiF1IIfyyZIAoHnAccZ6YNddA4MosEJROJVEpwoo=";
|
||||
hash = "sha256-FKawq1GN7Uz3NGmqw3za8+X4bZiFyFPMxM5PPtpKDrs=";
|
||||
# populate values that require us to use git. By doing this in postFetch we
|
||||
# can delete .git afterwards and maintain better reproducibility of the src.
|
||||
leaveDotGit = true;
|
||||
@@ -24,7 +24,7 @@ buildGoModule rec {
|
||||
'';
|
||||
};
|
||||
|
||||
vendorHash = "sha256-VHEj4y7XSfdbSeBo9+ZwBZXUj/ur0w6gPrxCt2xNQMM=";
|
||||
vendorHash = "sha256-GYAcRC9OMhlOax1s33SrgtbbAlyE9w8Zn4AL7bQrcNk=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "otree";
|
||||
version = "v0.3.0";
|
||||
version = "0.5.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "fioncat";
|
||||
repo = "otree";
|
||||
rev = version;
|
||||
hash = "sha256-WvoiTu6erNI5Cb9PSoHgL6+coIGWLe46pJVXBZHOLTE=";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-zsBHra8X1nM8QINaxi3Vcs82T8S5WtfNRN5vb/ppuLU=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-tgw1R1UmXAHcrQFsY4i4efGCXQW3m0PVYdFSK2q+NUk=";
|
||||
cargoHash = "sha256-Ncyj5s4EfbKsFGV29FDViK35nKOAZM+DODzIVRCpbuQ=";
|
||||
|
||||
meta = {
|
||||
description = "Command line tool to view objects (json/yaml/toml) in TUI tree widget";
|
||||
|
||||
@@ -14,4 +14,4 @@ DEPENDENCIES
|
||||
papertrail
|
||||
|
||||
BUNDLED WITH
|
||||
2.5.16
|
||||
2.6.9
|
||||
|
||||
@@ -2,42 +2,40 @@
|
||||
lib,
|
||||
stdenv,
|
||||
bundlerEnv,
|
||||
makeWrapper,
|
||||
ruby,
|
||||
bundlerUpdateScript,
|
||||
testers,
|
||||
papertrail,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "papertrail";
|
||||
version = (import ./gemset.nix).papertrail.version;
|
||||
|
||||
let
|
||||
papertrail-env = bundlerEnv {
|
||||
name = "papertrail-env";
|
||||
inherit ruby;
|
||||
gems = bundlerEnv {
|
||||
name = "papertrail";
|
||||
gemfile = ./Gemfile;
|
||||
lockfile = ./Gemfile.lock;
|
||||
gemset = ./gemset.nix;
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "papertrail";
|
||||
version = (import ./gemset.nix).papertrail.version;
|
||||
|
||||
dontUnpack = true;
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
buildInputs = [ gems ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
ln -s ${papertrail-env}/bin/papertrail $out/bin/papertrail
|
||||
makeWrapper ${gems}/bin/papertrail $out/bin/papertrail
|
||||
'';
|
||||
|
||||
passthru.updateScript = bundlerUpdateScript "papertrail";
|
||||
|
||||
passthru.tests.version = testers.testVersion { package = papertrail; };
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Command-line client for Papertrail log management service";
|
||||
mainProgram = "papertrail";
|
||||
homepage = "https://github.com/papertrail/papertrail-cli/";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ nicknovitski ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ nicknovitski ];
|
||||
platforms = ruby.meta.platforms;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# Generated by ./update.sh - do not update manually!
|
||||
# Last updated: 2025-07-25
|
||||
# Last updated: 2025-08-20
|
||||
{ fetchurl }:
|
||||
let
|
||||
any-darwin = {
|
||||
version = "6.9.77-2025-07-24";
|
||||
version = "6.9.79-2025-08-20";
|
||||
src = fetchurl {
|
||||
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Mac/QQ_6.9.77_250724_01.dmg";
|
||||
hash = "sha256-ZHpFH5PPDaVtbEZsb+1fyoscWuPYedTrIaoqhnsXRlc=";
|
||||
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Mac/QQ_6.9.79_250820_01.dmg";
|
||||
hash = "sha256-m8COj+kn9ify4D4FUpNXL31uO4j4DKqCQhZnoo5umTE=";
|
||||
};
|
||||
};
|
||||
in
|
||||
@@ -14,17 +14,17 @@ in
|
||||
aarch64-darwin = any-darwin;
|
||||
x86_64-darwin = any-darwin;
|
||||
aarch64-linux = {
|
||||
version = "3.2.18-2025-07-24";
|
||||
version = "3.2.19-2025-08-20";
|
||||
src = fetchurl {
|
||||
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.18_250724_arm64_01.deb";
|
||||
hash = "sha256-j+ouSBfryrRXQbyC4ZDyrKPLqJVw67tGjlHdKel5Br4=";
|
||||
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.19_250820_arm64_01.deb";
|
||||
hash = "sha256-rHgN0T9lcoAucwR3B2U8so/dAUfB92dQYc0TncTHPaM=";
|
||||
};
|
||||
};
|
||||
x86_64-linux = {
|
||||
version = "3.2.18-2025-07-24";
|
||||
version = "3.2.19-2025-08-20";
|
||||
src = fetchurl {
|
||||
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.18_250724_amd64_01.deb";
|
||||
hash = "sha256-HHFUXAv6oWsipBYECLNFJG8OMQ7fxjruA210w/oFFok=";
|
||||
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.19_250820_amd64_01.deb";
|
||||
hash = "sha256-4Y0GSWwFkqYX5ezE2Jk/tZIwsBHg88ZxJghzB+kXTds=";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -12,19 +12,19 @@
|
||||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "raycast";
|
||||
version = "1.102.4";
|
||||
version = "1.102.5";
|
||||
|
||||
src =
|
||||
{
|
||||
aarch64-darwin = fetchurl {
|
||||
name = "Raycast.dmg";
|
||||
url = "https://releases.raycast.com/releases/${finalAttrs.version}/download?build=arm";
|
||||
hash = "sha256-VYwvU9DWowE+34ZBAsqIjGJGnHVfdVWGl4baL5boN8M=";
|
||||
hash = "sha256-Fh46CsAeE9TpqVlYCc6s5ytO5dm+xoDJ7NawML4D9R4=";
|
||||
};
|
||||
x86_64-darwin = fetchurl {
|
||||
name = "Raycast.dmg";
|
||||
url = "https://releases.raycast.com/releases/${finalAttrs.version}/download?build=x86_64";
|
||||
hash = "sha256-LMkHWs/H5ESdp+JaUG0rlI9UVx29WYcU44t0fBAWg8A=";
|
||||
hash = "sha256-tBFnk5R9BqfL+MH1tBY76al7/jVzqpfI7yIGADQh6wQ=";
|
||||
};
|
||||
}
|
||||
.${stdenvNoCC.system} or (throw "raycast: ${stdenvNoCC.system} is unsupported.");
|
||||
@@ -80,7 +80,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
maintainers = with lib.maintainers; [
|
||||
lovesegfault
|
||||
stepbrobd
|
||||
donteatoreo
|
||||
FlameFlag
|
||||
jakecleary
|
||||
];
|
||||
platforms = [
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "renovate";
|
||||
version = "41.49.0";
|
||||
version = "41.81.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "renovatebot";
|
||||
repo = "renovate";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-n0Zfut9+nIWRvUU2po4YZVMp4bkJs9ExfNCqShUSVYc=";
|
||||
hash = "sha256-iFcq8TbUXcEf0q/ifAC4dXJkG7pYvTM78FHPZucky8g=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -41,7 +41,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
pnpmDeps = pnpm_10.fetchDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
fetcherVersion = 2;
|
||||
hash = "sha256-J0cAaM4DO3dsRmgx8vg8pZQgq78o3U3kKBrnRDuhJmk=";
|
||||
hash = "sha256-HQEN+gBvI9s5WEXrH/3WTMSCg0ERykeKit8z8BBUe6w=";
|
||||
};
|
||||
|
||||
env.COREPACK_ENABLE_STRICT = 0;
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -201,7 +201,7 @@
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
|
||||
add_library(ruri SHARED ${SOURCES})
|
||||
- install (TARGETS ruri DESTINATION /usr/lib/)
|
||||
+ install (TARGETS ruri)
|
||||
else ()
|
||||
# add the executable
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
|
||||
@@ -215,7 +215,7 @@
|
||||
VERBATIM
|
||||
)
|
||||
endif()
|
||||
- install (TARGETS ruri DESTINATION /usr/bin/)
|
||||
+ install (TARGETS ruri)
|
||||
endif()
|
||||
|
||||
add_custom_target(
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user