Skip to content

Commit

Permalink
Make ocm flake.nix ready (#625)
Browse files Browse the repository at this point in the history
* flake template for ocm

* refinement and feedback from @SuperSandro2000
  • Loading branch information
vasu1124 authored Jan 29, 2024
1 parent 01b18f0 commit 53ee485
Show file tree
Hide file tree
Showing 3 changed files with 185 additions and 0 deletions.
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,37 @@ The code for the CLI can be found in [package `cmds/ocm`](https://github.com/op
The OCI and OCM support can be found in packages
[`pkg/contexts/oci`](pkg/contexts/oci) and [`pkg/contexts/ocm`](pkg/contexts/ocm).

## Installation

Install the latest release via [Homebrew](https://brew.sh), [Nix](https://nixos.org), or directly from [GitHub Releases](https://github.com/open-component-model/ocm/releases).

### Install using Homebrew

```sh
# Homebrew (macOS and Linux)
brew install open-component-model/tap/ocm
```

### Install using Nix (with [Flakes](https://nixos.wiki/wiki/Flakes))

```bash
# Nix (macOS, Linux, and Windows)
# ad hoc cmd execution
nix run github:open-component-model/ocm -- --help
nix run github:open-component-model/ocm#helminstaller -- --help

# install development version
nix profile install github:open-component-model/ocm
# or release <version>
nix profile install github:open-component-model/ocm/<version>

#check installation
nix profile list | grep ocm

# optionally, open a new shell and verify that cmd completion works
ocm --help
```

## Examples
An example of how to use the `ocm` CLI in a Makefile can be found in [`examples/make`](https://github.com/open-component-model/ocm/blob/main/examples/make/Makefile).

Expand Down
27 changes: 27 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

127 changes: 127 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
/*
SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors
SPDX-License-Identifier: Apache-2.0
*/
{
description = "Nix flake for ocm";

inputs = {
# NixPkgs (nixos-23.11)
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
};

outputs = { self, nixpkgs, ... }:
let
pname = "ocm";

# System types to support.
supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];

# Helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'.
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;

# Nixpkgs instantiated for supported system types.
nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; });

in
{
# Provide some binary packages for selected system types.
packages = forAllSystems (system:
let
pkgs = nixpkgsFor.${system};
inherit (pkgs) stdenv lib ;
in
{
${pname} = pkgs.buildGo121Module rec {
inherit pname self;
version = lib.fileContents ./VERSION;
gitCommit = if (self ? rev) then self.rev else self.dirtyRev;
state = if (self ? rev) then "clean" else "dirty";

# This vendorHash represents a dervative of all go.mod dependancies and needs to be adjusted with every change
vendorHash = "sha256-CA3p9QNHo7mHCoXkuOojFAJen3TdieSsoQVivxPk3yw=";

src = ./.;

ldflags = [
"-s" "-w"
"-X github.com/open-component-model/ocm/pkg/version.gitVersion=${version}"
"-X github.com/open-component-model/ocm/pkg/version.gitTreeState=${state}"
"-X github.com/open-component-model/ocm/pkg/version.gitCommit=${gitCommit}"
# "-X github.com/open-component-model/ocm/pkg/version.buildDate=1970-01-01T0:00:00+0000"
];

CGO_ENABLED = 0;

subPackages = [
"cmds/ocm"
"cmds/helminstaller"
"cmds/demoplugin"
"cmds/ecrplugin"
];

nativeBuildInputs = [ pkgs.installShellFiles ];

postInstall = ''
installShellCompletion --cmd ${pname} \
--zsh <($out/bin/${pname} completion zsh) \
--bash <($out/bin/${pname} completion bash) \
--fish <($out/bin/${pname} completion fish)
'';

meta = with lib; {
description = "Open Component Model (OCM) is an open standard to describe software bills of delivery (SBOD)";
longDescription = ''
OCM is a technology-agnostic and machine-readable format focused on the software artifacts that must be delivered for software products.
The specification is also used to express metadata needed for security, compliance, and certification purpose.
'';
homepage = "https://ocm.software";
license = licenses.asl20;
platforms = supportedSystems;
};
};
});

# Add dependencies that are only needed for development
devShells = forAllSystems (system:
let
pkgs = nixpkgsFor.${system};
in
{
default = pkgs.mkShell {
buildInputs = with pkgs; [
go_1_21 # golang 1.21
gopls # go language server
gotools # go imports
go-tools # static checks
gnumake # standard make
];
};
});

# The default package for 'nix build'.
defaultPackage = forAllSystems (system: self.packages.${system}.${pname});

# These are the apps included in the default package.
apps = forAllSystems (system: rec {
${pname} = default;
default = {
type = "app";
program = self.packages.${system}.${pname} + "/bin/ocm";
};
helminstaller = {
type = "app";
program = self.packages.${system}.${pname} + "/bin/helminstaller";
};
demo = {
type = "app";
program = self.packages.${system}.${pname} + "/bin/demoplugin";
};
ecrplugin = {
type = "app";
program = self.packages.${system}.${pname} + "/bin/ecrplugin";
};
});
};
}

0 comments on commit 53ee485

Please sign in to comment.