Re-enable armv6l and i686 #136

Merged
quentin merged 2 commits from bug/rust-musl into main 2021-10-29 10:05:44 +00:00
8 changed files with 243 additions and 313 deletions

View file

@ -80,38 +80,6 @@ steps:
- nix-build --no-build-output --argstr target x86_64-unknown-linux-musl --arg release false --argstr git_version $DRONE_COMMIT - nix-build --no-build-output --argstr target x86_64-unknown-linux-musl --arg release false --argstr git_version $DRONE_COMMIT
- nix-shell --arg release false --run ./script/test-smoke.sh || (cat /tmp/garage.log; false) - nix-shell --arg release false --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)
- name: update cache
image: nixpkgs/nix:nixos-21.05
environment:
AWS_ACCESS_KEY_ID:
from_secret: cache_aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: cache_aws_secret_access_key
NIX_PRIV_KEY:
from_secret: nix_priv_key
volumes:
- name: nix_store
path: /nix
- name: nix_config
path: /etc/nix
commands:
- (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec)
- |
nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
$(nix-store -qR --include-outputs \
$(nix-build --no-out-link shell.nix --arg release false -A inputDerivation))
- |
nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
$(nix-store -qR --include-outputs \
$(nix-instantiate --argstr target x86_64-unknown-linux-musl --argstr compileMode test))
- |
nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
$(nix-store -qR --include-outputs \
$(nix-instantiate --argstr target x86_64-unknown-linux-musl --arg release false))
when:
event:
- cron
trigger: trigger:
event: event:
- custom - custom
@ -212,27 +180,6 @@ steps:
commands: commands:
- nix-shell --run ./script/test-smoke.sh || (cat /tmp/garage.log; false) - nix-shell --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)
- name: update cache
image: nixpkgs/nix:nixos-21.05
environment:
AWS_ACCESS_KEY_ID:
from_secret: cache_aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: cache_aws_secret_access_key
NIX_PRIV_KEY:
from_secret: nix_priv_key
volumes:
- name: nix_store
path: /nix
- name: nix_config
path: /etc/nix
commands:
- (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec)
- |
nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
$(nix-store -qR --include-outputs \
$(nix-instantiate --argstr target $TARGET --arg release true))
- name: push static binary - name: push static binary
image: nixpkgs/nix:nixos-21.05 image: nixpkgs/nix:nixos-21.05
volumes: volumes:
@ -276,115 +223,94 @@ trigger:
node: node:
nix: 1 nix: 1
# --- ---
# kind: pipeline kind: pipeline
# type: docker type: docker
# name: release-linux-i686 name: release-linux-i686
#
# volumes: volumes:
# - name: nix_store - name: nix_store
# host: host:
# path: /var/lib/drone/nix path: /var/lib/drone/nix
# - name: nix_config - name: nix_config
# temp: {} temp: {}
#
# environment: environment:
# TARGET: i686-unknown-linux-musl TARGET: i686-unknown-linux-musl
#
# steps: steps:
# - name: setup nix - name: setup nix
# image: nixpkgs/nix:nixos-21.05 image: nixpkgs/nix:nixos-21.05
# volumes: volumes:
# - name: nix_store - name: nix_store
# path: /nix path: /nix
# - name: nix_config - name: nix_config
# path: /etc/nix path: /etc/nix
# commands: commands:
# - cp nix/nix.conf /etc/nix/nix.conf - cp nix/nix.conf /etc/nix/nix.conf
# - nix-build --no-build-output --no-out-link shell.nix -A inputDerivation - nix-build --no-build-output --no-out-link shell.nix -A inputDerivation
#
# - name: build - name: build
# image: nixpkgs/nix:nixos-21.05 image: nixpkgs/nix:nixos-21.05
# volumes: volumes:
# - name: nix_store - name: nix_store
# path: /nix path: /nix
# - name: nix_config - name: nix_config
# path: /etc/nix path: /etc/nix
# commands: commands:
# - nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT - nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT
#
# - name: integration - name: integration
# image: nixpkgs/nix:nixos-21.05 image: nixpkgs/nix:nixos-21.05
# volumes: volumes:
# - name: nix_store - name: nix_store
# path: /nix path: /nix
# - name: nix_config - name: nix_config
# path: /etc/nix path: /etc/nix
# commands: commands:
# - nix-shell --run ./script/test-smoke.sh || (cat /tmp/garage.log; false) - nix-shell --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)
#
# - name: update cache - name: push static binary
# image: nixpkgs/nix:nixos-21.05 image: nixpkgs/nix:nixos-21.05
# environment: volumes:
# AWS_ACCESS_KEY_ID: - name: nix_store
# from_secret: cache_aws_access_key_id path: /nix
# AWS_SECRET_ACCESS_KEY: - name: nix_config
# from_secret: cache_aws_secret_access_key path: /etc/nix
# NIX_PRIV_KEY: environment:
# from_secret: nix_priv_key AWS_ACCESS_KEY_ID:
# volumes: from_secret: garagehq_aws_access_key_id
# - name: nix_store AWS_SECRET_ACCESS_KEY:
# path: /nix from_secret: garagehq_aws_secret_access_key
# - name: nix_config commands:
# path: /etc/nix - nix-shell --arg rust false --arg integration false --run "to_s3"
# commands:
# - (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec) - name: docker build and publish
# - | image: nixpkgs/nix:nixos-21.05
# nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \ volumes:
# $(nix-store -qR --include-outputs \ - name: nix_store
# $(nix-instantiate --argstr target $TARGET --arg release true)) path: /nix
# - name: nix_config
# - name: push static binary path: /etc/nix
# image: nixpkgs/nix:nixos-21.05 environment:
# volumes: DOCKER_AUTH:
# - name: nix_store from_secret: docker_auth
# path: /nix DOCKER_PLATFORM: "linux/386"
# - name: nix_config CONTAINER_NAME: "dxflrs/386_garage"
# path: /etc/nix HOME: "/kaniko"
# environment: commands:
# AWS_ACCESS_KEY_ID: - mkdir -p /kaniko/.docker
# from_secret: garagehq_aws_access_key_id - echo $DOCKER_AUTH > /kaniko/.docker/config.json
# AWS_SECRET_ACCESS_KEY: - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
# from_secret: garagehq_aws_secret_access_key - nix-shell --arg rust false --arg integration false --run "to_docker"
# commands:
# - nix-shell --arg rust false --arg integration false --run "to_s3" trigger:
# event:
# - name: docker build and publish - promote
# image: nixpkgs/nix:nixos-21.05 - cron
# volumes:
# - name: nix_store node:
# path: /nix nix: 1
# - name: nix_config
# path: /etc/nix
# environment:
# DOCKER_AUTH:
# from_secret: docker_auth
# DOCKER_PLATFORM: "linux/386"
# CONTAINER_NAME: "dxflrs/386_garage"
# HOME: "/kaniko"
# commands:
# - mkdir -p /kaniko/.docker
# - echo $DOCKER_AUTH > /kaniko/.docker/config.json
# - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
# - nix-shell --arg rust false --arg integration false --run "to_docker"
#
# trigger:
# event:
# - promote
# - cron
#
# node:
# nix: 1
--- ---
kind: pipeline kind: pipeline
@ -423,27 +349,6 @@ steps:
commands: commands:
- nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT - nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT
- name: update cache
image: nixpkgs/nix:nixos-21.05
environment:
AWS_ACCESS_KEY_ID:
from_secret: cache_aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: cache_aws_secret_access_key
NIX_PRIV_KEY:
from_secret: nix_priv_key
volumes:
- name: nix_store
path: /nix
- name: nix_config
path: /etc/nix
commands:
- (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec)
- |
nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
$(nix-store -qR --include-outputs \
$(nix-instantiate --argstr target $TARGET --arg release true))
- name: push static binary - name: push static binary
image: nixpkgs/nix:nixos-21.05 image: nixpkgs/nix:nixos-21.05
volumes: volumes:
@ -486,105 +391,84 @@ trigger:
node: node:
nix: 1 nix: 1
# --- ---
# kind: pipeline kind: pipeline
# type: docker type: docker
# name: release-linux-armv6l name: release-linux-armv6l
#
# volumes: volumes:
# - name: nix_store - name: nix_store
# host: host:
# path: /var/lib/drone/nix path: /var/lib/drone/nix
# - name: nix_config - name: nix_config
# temp: {} temp: {}
#
# environment: environment:
# TARGET: armv6l-unknown-linux-musleabihf TARGET: armv6l-unknown-linux-musleabihf
#
# steps: steps:
# - name: setup nix - name: setup nix
# image: nixpkgs/nix:nixos-21.05 image: nixpkgs/nix:nixos-21.05
# volumes: volumes:
# - name: nix_store - name: nix_store
# path: /nix path: /nix
# - name: nix_config - name: nix_config
# path: /etc/nix path: /etc/nix
# commands: commands:
# - cp nix/nix.conf /etc/nix/nix.conf - cp nix/nix.conf /etc/nix/nix.conf
# - nix-build --no-build-output --no-out-link --arg rust false --arg integration false -A inputDerivation - nix-build --no-build-output --no-out-link --arg rust false --arg integration false -A inputDerivation
#
# - name: build - name: build
# image: nixpkgs/nix:nixos-21.05 image: nixpkgs/nix:nixos-21.05
# volumes: volumes:
# - name: nix_store - name: nix_store
# path: /nix path: /nix
# - name: nix_config - name: nix_config
# path: /etc/nix path: /etc/nix
# commands: commands:
# - nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT - nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT
#
# - name: update cache - name: push static binary
# image: nixpkgs/nix:nixos-21.05 image: nixpkgs/nix:nixos-21.05
# environment: volumes:
# AWS_ACCESS_KEY_ID: - name: nix_store
# from_secret: cache_aws_access_key_id path: /nix
# AWS_SECRET_ACCESS_KEY: - name: nix_config
# from_secret: cache_aws_secret_access_key path: /etc/nix
# NIX_PRIV_KEY: environment:
# from_secret: nix_priv_key AWS_ACCESS_KEY_ID:
# volumes: from_secret: garagehq_aws_access_key_id
# - name: nix_store AWS_SECRET_ACCESS_KEY:
# path: /nix from_secret: garagehq_aws_secret_access_key
# - name: nix_config commands:
# path: /etc/nix - nix-shell --arg integration false --arg rust false --run "to_s3"
# commands:
# - (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec) - name: docker build and publish
# - | image: nixpkgs/nix:nixos-21.05
# nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \ volumes:
# $(nix-store -qR --include-outputs \ - name: nix_store
# $(nix-instantiate --argstr target $TARGET --arg release true)) path: /nix
# - name: nix_config
# - name: push static binary path: /etc/nix
# image: nixpkgs/nix:nixos-21.05 environment:
# volumes: DOCKER_AUTH:
# - name: nix_store from_secret: docker_auth
# path: /nix DOCKER_PLATFORM: "linux/arm"
# - name: nix_config CONTAINER_NAME: "dxflrs/arm_garage"
# path: /etc/nix HOME: "/kaniko"
# environment: commands:
# AWS_ACCESS_KEY_ID: - mkdir -p /kaniko/.docker
# from_secret: garagehq_aws_access_key_id - echo $DOCKER_AUTH > /kaniko/.docker/config.json
# AWS_SECRET_ACCESS_KEY: - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
# from_secret: garagehq_aws_secret_access_key - nix-shell --arg rust false --arg integration false --run "to_docker"
# commands:
# - nix-shell --arg integration false --arg rust false --run "to_s3" trigger:
# event:
# - name: docker build and publish - promote
# image: nixpkgs/nix:nixos-21.05 - cron
# volumes:
# - name: nix_store node:
# path: /nix nix: 1
# - name: nix_config
# path: /etc/nix
# environment:
# DOCKER_AUTH:
# from_secret: docker_auth
# DOCKER_PLATFORM: "linux/arm"
# CONTAINER_NAME: "dxflrs/arm_garage"
# HOME: "/kaniko"
# commands:
# - mkdir -p /kaniko/.docker
# - echo $DOCKER_AUTH > /kaniko/.docker/config.json
# - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
# - nix-shell --arg rust false --arg integration false --run "to_docker"
#
# trigger:
# event:
# - promote
# - cron
#
# node:
# nix: 1
--- ---
kind: pipeline kind: pipeline
@ -613,9 +497,9 @@ steps:
depends_on: depends_on:
- release-linux-x86_64 - release-linux-x86_64
#- release-linux-i686 - release-linux-i686
- release-linux-aarch64 - release-linux-aarch64
#- release-linux-armv6l - release-linux-armv6l
trigger: trigger:
event: event:

View file

@ -4,4 +4,4 @@ ENV RUST_BACKTRACE=1
ENV RUST_LOG=garage=info ENV RUST_LOG=garage=info
COPY result/bin/garage / COPY result/bin/garage /
CMD [ "/garage", "server", "-c", "config.toml"] CMD [ "/garage", "server"]

View file

@ -11,26 +11,17 @@ with import ./nix/common.nix;
let let
crossSystem = { config = target; }; crossSystem = { config = target; };
in let in let
pkgs = import pkgsSrc { pkgs = import pkgsSrc {
inherit system crossSystem; inherit system crossSystem;
overlays = [ cargo2nixOverlay rustOverlay ]; overlays = [ cargo2nixOverlay ];
}; };
rustDist = pkgs.buildPackages.rust-bin.stable.latest.default;
/* /*
The following complexity should be abstracted by makePackageSet' (note the final quote). The following complexity should be abstracted by makePackageSet' (note the final quote).
However its code uses deprecated features of rust-overlay that can lead to bug. However its code uses deprecated features of rust-overlay that can lead to bug.
Instead, we build our own rustChannel object with the recommended API of rust-overlay. Instead, we build our own rustChannel object with the recommended API of rust-overlay.
*/ */
rustChannel = rustDist // { rustChannel = pkgs.rustPlatform.rust;
cargo = rustDist;
rustc = rustDist.override {
targets = [
(pkgs.rustBuilder.rustLib.realHostTriple pkgs.stdenv.targetPlatform)
];
};
};
overrides = pkgs.buildPackages.rustBuilder.overrides.all ++ [ overrides = pkgs.buildPackages.rustBuilder.overrides.all ++ [
(pkgs.rustBuilder.rustLib.makeOverride { (pkgs.rustBuilder.rustLib.makeOverride {

View file

@ -92,10 +92,21 @@ caching our development dependencies.
*Currently there is no automatic garbage collection of the cache: we should monitor its growth. *Currently there is no automatic garbage collection of the cache: we should monitor its growth.
Hopefully, we can erase it totally without breaking any build, the next build will only be slower.* Hopefully, we can erase it totally without breaking any build, the next build will only be slower.*
In practise, we concluded that we do not want to cache all the compilation dependencies.
Instead, we want to cache the toolchain we use to build Garage each time we change it.
So we removed from Drone any automatic update of the cache and instead handle them manually with:
```
source ~/.awsrc
nix-shell --run 'refresh_toolchain'
```
Internally, it will run `nix-build` on `nix/toolchain.nix` and send the output plus its depedencies to the cache.
To erase the cache: To erase the cache:
``` ```
mc rm --recursive --force 'garage/nix/*' mc rm --recursive --force 'garage/nix/'
``` ```
### Publishing Garage ### Publishing Garage

View file

@ -12,16 +12,10 @@ rec {
url = "https://github.com/superboum/cargo2nix"; url = "https://github.com/superboum/cargo2nix";
rev = "1364752cd784764db2ef5b1e1248727cebfae2ce"; rev = "1364752cd784764db2ef5b1e1248727cebfae2ce";
}; };
rustOverlaySrc = fetchGit {
# As of 2021-10-05
url = "https://github.com/oxalica/rust-overlay";
rev = "9c2fc6a62ccbc6f420d71ecac6bf0b84dbbee64f";
};
/* /*
* Shared objects * Shared objects
*/ */
rustOverlay = import rustOverlaySrc;
cargo2nix = import cargo2nixSrc; cargo2nix = import cargo2nixSrc;
cargo2nixOverlay = import "${cargo2nixSrc}/overlay"; cargo2nixOverlay = import "${cargo2nixSrc}/overlay";
} }

View file

@ -2,6 +2,3 @@ substituters = https://cache.nixos.org https://nix.web.deuxfleurs.fr
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix.web.deuxfleurs.fr:eTGL6kvaQn6cDR/F9lDYUIP9nCVR/kkshYfLDJf1yKs= trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix.web.deuxfleurs.fr:eTGL6kvaQn6cDR/F9lDYUIP9nCVR/kkshYfLDJf1yKs=
max-jobs = auto max-jobs = auto
cores = 4 cores = 4
# required for containers
sandbox = false

29
nix/toolchain.nix Normal file
View file

@ -0,0 +1,29 @@
{
system ? builtins.currentSystem,
}:
with import ./common.nix;
let
platforms = [
"x86_64-unknown-linux-musl"
"i686-unknown-linux-musl"
"aarch64-unknown-linux-musl"
"armv6l-unknown-linux-musleabihf"
];
pkgsList = builtins.map (target: import pkgsSrc {
inherit system;
crossSystem = { config = target; };
}) platforms;
pkgsHost = import pkgsSrc {};
lib = pkgsHost.lib;
kaniko = (import ./kaniko.nix) pkgsHost;
in
lib.flatten (builtins.map (pkgs: [
pkgs.rustPlatform.rust.rustc
pkgs.rustPlatform.rust.cargo
pkgs.buildPackages.stdenv.cc
]) pkgsList) ++ [
kaniko
]

View file

@ -1,6 +1,5 @@
{ {
system ? builtins.currentSystem, system ? builtins.currentSystem,
crossSystem ? null,
rust ? true, rust ? true,
integration ? true, integration ? true,
release ? true, release ? true,
@ -10,10 +9,9 @@ with import ./nix/common.nix;
let let
pkgs = import pkgsSrc { pkgs = import pkgsSrc {
inherit system crossSystem; inherit system;
overlays = [ cargo2nixOverlay rustOverlay ]; overlays = [ cargo2nixOverlay ];
}; };
rustDist = pkgs.buildPackages.rust-bin.stable.latest.default;
kaniko = (import ./nix/kaniko.nix) pkgs; kaniko = (import ./nix/kaniko.nix) pkgs;
in in
@ -57,13 +55,39 @@ function refresh_index {
result \ result \
s3://garagehq.deuxfleurs.fr/_releases.html s3://garagehq.deuxfleurs.fr/_releases.html
} }
function refresh_toolchain {
nix copy \
--to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
$(nix-store -qR \
$(nix-build --quiet --no-build-output --no-out-link nix/toolchain.nix))
}
''; '';
nativeBuildInputs = nativeBuildInputs =
(if rust then [ rustDist (pkgs.callPackage cargo2nix {}).package ] else []) (if rust then [
pkgs.rustPlatform.rust.rustc
pkgs.rustPlatform.rust.cargo
pkgs.clippy
pkgs.rustfmt
/*(pkgs.callPackage cargo2nix {}).package*/
] else [])
++ ++
(if integration then [ pkgs.s3cmd pkgs.awscli2 pkgs.minio-client pkgs.rclone pkgs.socat pkgs.psmisc pkgs.which ] else []) (if integration then [
pkgs.s3cmd
pkgs.awscli2
pkgs.minio-client
pkgs.rclone
pkgs.socat
pkgs.psmisc
pkgs.which
pkgs.openssl
pkgs.curl
] else [])
++ ++
(if release then [ pkgs.awscli2 kaniko ] else []) (if release then [
pkgs.awscli2
kaniko
] else [])
; ;
} }