commit
35ebdd5b7e
@ -0,0 +1,6 @@ |
||||
version: 2 |
||||
updates: |
||||
- package-ecosystem: "github-actions" |
||||
directory: "/" |
||||
schedule: |
||||
interval: "weekly" |
@ -0,0 +1,65 @@ |
||||
name: "Build and populate cache" |
||||
on: |
||||
pull_request: |
||||
push: |
||||
schedule: |
||||
# rebuild everyday at 2:51 |
||||
# TIP: Choose a random time here so not all repositories are build at once: |
||||
# https://www.random.org/clock-times/?num=1&earliest=01%3A00&latest=08%3A00&interval=5&format=html&rnd=new |
||||
- cron: '51 2 * * *' |
||||
jobs: |
||||
tests: |
||||
strategy: |
||||
matrix: |
||||
# Set this to notify the global nur package registry that changes are |
||||
# available. |
||||
# |
||||
# The repo name as used in |
||||
# https://github.com/nix-community/NUR/blob/master/repos.json |
||||
nurRepo: |
||||
- <YOUR_REPO_NAME> |
||||
# Set this to cache your build results in cachix for faster builds |
||||
# in CI and for everyone who uses your cache. |
||||
# |
||||
# Format: Your cachix cache host name without the ".cachix.org" suffix. |
||||
# Example: mycache (for mycache.cachix.org) |
||||
# |
||||
# For this to work, you also need to set the CACHIX_SIGNING_KEY secret |
||||
# in your repository settings in Github found at https://github.com/<your_githubname>/nur-packages/settings/secrets |
||||
cachixName: |
||||
- <YOUR_CACHIX_NAME> |
||||
nixPath: |
||||
- nixpkgs=channel:nixos-unstable |
||||
- nixpkgs=channel:nixpkgs-unstable |
||||
- nixpkgs=channel:nixos-20.09 |
||||
runs-on: ubuntu-latest |
||||
steps: |
||||
- name: Checkout repository |
||||
uses: actions/checkout@v2.3.4 |
||||
- name: Install nix |
||||
uses: cachix/install-nix-action@v12 |
||||
with: |
||||
nix_path: "${{ matrix.nixPath }}" |
||||
- name: Show nixpkgs version |
||||
run: nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version' |
||||
- name: Setup cachix |
||||
uses: cachix/cachix-action@v8 |
||||
if: ${{ matrix.cachixName != '<YOUR_CACHIX_NAME>' }} |
||||
with: |
||||
name: ${{ matrix.cachixName }} |
||||
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' |
||||
- name: Check evaluation |
||||
run: | |
||||
nix-env -f . -qa \* --meta --xml \ |
||||
--allowed-uris https://static.rust-lang.org \ |
||||
--option restrict-eval true \ |
||||
--option allow-import-from-derivation true \ |
||||
--drv-path --show-trace \ |
||||
-I nixpkgs=$(nix-instantiate --find-file nixpkgs) \ |
||||
-I $PWD |
||||
- name: Build nix packages |
||||
# TODO switch to default nixpkgs channel once nix-build-uncached 1.0.0 is in stable |
||||
run: nix run -I 'nixpkgs=channel:nixos-unstable' nixpkgs.nix-build-uncached -c nix-build-uncached ci.nix -A cacheOutputs |
||||
- name: Trigger NUR update |
||||
if: ${{ matrix.nurRepo != '<YOUR_REPO_NAME>' }} |
||||
run: curl -XPOST "https://nur-update.herokuapp.com/update?repo=${{ matrix.nurRepo }}" |
@ -0,0 +1,3 @@ |
||||
result |
||||
result-* |
||||
|
@ -0,0 +1,40 @@ |
||||
version: ~> 1.0 |
||||
import: nix-community/nix-travis-ci:nix.yml@main |
||||
|
||||
sudo: false |
||||
|
||||
env: |
||||
global: |
||||
# Set this to cache your build results in cachix for faster builds |
||||
# in travis and for everyone who uses your cache. |
||||
# |
||||
# Format: Your cachix cache host name without the ".cachix.org" suffix. |
||||
# Example: mycache (for mycache.cachix.org) |
||||
# |
||||
# For this to work, you also need to set the CACHIX_SIGNING_KEY |
||||
# in your repository settings in Travis. |
||||
# - CACHIX_CACHE= |
||||
# Set this to notify the global nur package registry that changes are |
||||
# available. |
||||
# |
||||
# The repo name as used in |
||||
# https://github.com/nix-community/NUR/blob/master/repos.json |
||||
- NUR_REPO="<YOUR_NUR_REPO_NAME_HERE>" |
||||
|
||||
matrix: |
||||
include: |
||||
- env: NIX_PATH=nixpkgs=channel:nixpkgs-unstable |
||||
- env: NIX_PATH=nixpkgs=channel:nixos-unstable |
||||
- env: NIX_PATH=nixpkgs=channel:nixos-20.03 |
||||
|
||||
script: |
||||
- nix-build ci.nix -A buildOutputs |
||||
- nix eval -f default.nix 'lib' |
||||
- nix eval -f default.nix 'modules' |
||||
- nix eval -f default.nix 'overlays' |
||||
|
||||
after_success: |
||||
- if [ -n "${CACHIX_CACHE}" ]; then nix-build ci.nix -A cacheOutputs | cachix push "${CACHIX_CACHE}"; fi |
||||
- if [[ NUR_REPO != "<YOUR_NUR_REPO_NAME_HERE>" && "cron" != "${TRAVIS_EVENT_TYPE}" && "false" = "${TRAVIS_PULL_REQUEST}" && "master" = "${TRAVIS_BRANCH}" ]]; then |
||||
curl -XPOST "https://nur-update.herokuapp.com/update?repo=${NUR_REPO}"; fi |
||||
|
@ -0,0 +1,22 @@ |
||||
MIT License |
||||
|
||||
Copyright (c) 2018 Francesco Gazzetta |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in all |
||||
copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
SOFTWARE. |
||||
|
@ -0,0 +1,37 @@ |
||||
# nur-packages-template |
||||
|
||||
**A template for [NUR](https://github.com/nix-community/NUR) repositories** |
||||
|
||||
## Setup |
||||
|
||||
1. Click on [Use this template](https://github.com/nix-community/nur-packages-template/generate) to start a repo based on this template. (Do _not_ fork it.) |
||||
2. Add your packages to the [pkgs](./pkgs) directory and to |
||||
[default.nix](./default.nix) |
||||
* Remember to mark the broken packages as `broken = true;` in the `meta` |
||||
attribute, or travis (and consequently caching) will fail! |
||||
* Library functions, modules and overlays go in the respective directories |
||||
3. Choose your CI: Depending on your preference you can use github actions (recommended) or [Travis ci](https://travis-ci.com). |
||||
- Github actions: Change your NUR repo name and optionally add a cachix name in [.github/workflows/build.yml](./.github/workflows/build.yml) and change the cron timer |
||||
to a random value as described in the file |
||||
- Travis ci: Change your NUR repo name and optionally your cachix repo name in |
||||
[.travis.yml](./.travis.yml). Than enable travis in your repo. You can add a cron job in the repository settings on travis to keep your cachix cache fresh |
||||
5. Change your travis and cachix names on the README template section and delete |
||||
the rest |
||||
6. [Add yourself to NUR](https://github.com/nix-community/NUR#how-to-add-your-own-repository) |
||||
|
||||
## README template |
||||
|
||||
# nur-packages |
||||
|
||||
**My personal [NUR](https://github.com/nix-community/NUR) repository** |
||||
|
||||
<!-- Remove this if you don't use github actions --> |
||||
 |
||||
|
||||
<!-- |
||||
Uncomment this if you use travis: |
||||
|
||||
[](https://travis-ci.com/<YOUR_TRAVIS_USERNAME>/nur-packages) |
||||
--> |
||||
[](https://<YOUR_CACHIX_CACHE_NAME>.cachix.org) |
||||
|
@ -0,0 +1,53 @@ |
||||
# This file provides all the buildable and cacheable packages and |
||||
# package outputs in your package set. These are what gets built by CI, |
||||
# so if you correctly mark packages as |
||||
# |
||||
# - broken (using `meta.broken`), |
||||
# - unfree (using `meta.license.free`), and |
||||
# - locally built (using `preferLocalBuild`) |
||||
# |
||||
# then your CI will be able to build and cache only those packages for |
||||
# which this is possible. |
||||
|
||||
{ pkgs ? import <nixpkgs> { } }: |
||||
|
||||
with builtins; |
||||
let |
||||
isReserved = n: n == "lib" || n == "overlays" || n == "modules"; |
||||
isDerivation = p: isAttrs p && p ? type && p.type == "derivation"; |
||||
isBuildable = p: !(p.meta.broken or false) && p.meta.license.free or true; |
||||
isCacheable = p: !(p.preferLocalBuild or false); |
||||
shouldRecurseForDerivations = p: isAttrs p && p.recurseForDerivations or false; |
||||
|
||||
nameValuePair = n: v: { name = n; value = v; }; |
||||
|
||||
concatMap = builtins.concatMap or (f: xs: concatLists (map f xs)); |
||||
|
||||
flattenPkgs = s: |
||||
let |
||||
f = p: |
||||
if shouldRecurseForDerivations p then flattenPkgs p |
||||
else if isDerivation p then [ p ] |
||||
else [ ]; |
||||
in |
||||
concatMap f (attrValues s); |
||||
|
||||
outputsOf = p: map (o: p.${o}) p.outputs; |
||||
|
||||
nurAttrs = import ./default.nix { inherit pkgs; }; |
||||
|
||||
nurPkgs = |
||||
flattenPkgs |
||||
(listToAttrs |
||||
(map (n: nameValuePair n nurAttrs.${n}) |
||||
(filter (n: !isReserved n) |
||||
(attrNames nurAttrs)))); |
||||
|
||||
in |
||||
rec { |
||||
buildPkgs = filter isBuildable nurPkgs; |
||||
cachePkgs = filter isCacheable buildPkgs; |
||||
|
||||
buildOutputs = concatMap outputsOf buildPkgs; |
||||
cacheOutputs = concatMap outputsOf cachePkgs; |
||||
} |
@ -0,0 +1,20 @@ |
||||
# This file describes your repository contents. |
||||
# It should return a set of nix derivations |
||||
# and optionally the special attributes `lib`, `modules` and `overlays`. |
||||
# It should NOT import <nixpkgs>. Instead, you should take pkgs as an argument. |
||||
# Having pkgs default to <nixpkgs> is fine though, and it lets you use short |
||||
# commands such as: |
||||
# nix-build -A mypackage |
||||
|
||||
{ pkgs ? import <nixpkgs> { } }: |
||||
|
||||
{ |
||||
# The `lib`, `modules`, and `overlay` names are special |
||||
lib = import ./lib { inherit pkgs; }; # functions |
||||
modules = import ./modules; # NixOS modules |
||||
overlays = import ./overlays; # nixpkgs overlays |
||||
|
||||
example-package = pkgs.callPackage ./pkgs/example-package { }; |
||||
# some-qt5-package = pkgs.libsForQt5.callPackage ./pkgs/some-qt5-package { }; |
||||
# ... |
||||
} |
@ -0,0 +1,7 @@ |
||||
{ pkgs }: |
||||
|
||||
with pkgs.lib; { |
||||
# Add your library functions here |
||||
# |
||||
# hexint = x: hexvals.${toLower x}; |
||||
} |
@ -0,0 +1,5 @@ |
||||
{ |
||||
# Add your NixOS modules here |
||||
# |
||||
# my-module = ./my-module; |
||||
} |
@ -0,0 +1,15 @@ |
||||
# You can use this file as a nixpkgs overlay. This is useful in the |
||||
# case where you don't want to add the whole NUR namespace to your |
||||
# configuration. |
||||
|
||||
self: super: |
||||
let |
||||
isReserved = n: n == "lib" || n == "overlays" || n == "modules"; |
||||
nameValuePair = n: v: { name = n; value = v; }; |
||||
nurAttrs = import ./default.nix { pkgs = super; }; |
||||
|
||||
in |
||||
builtins.listToAttrs |
||||
(map (n: nameValuePair n nurAttrs.${n}) |
||||
(builtins.filter (n: !isReserved n) |
||||
(builtins.attrNames nurAttrs))) |
@ -0,0 +1,5 @@ |
||||
{ |
||||
# Add your overlays here |
||||
# |
||||
# my-overlay = import ./my-overlay; |
||||
} |
@ -0,0 +1,9 @@ |
||||
{ stdenv }: |
||||
|
||||
stdenv.mkDerivation rec { |
||||
name = "example-package-${version}"; |
||||
version = "1.0"; |
||||
src = ./.; |
||||
buildPhase = "echo echo Hello World > example"; |
||||
installPhase = "install -Dm755 example $out"; |
||||
} |
Loading…
Reference in new issue