ffsend/.gitlab-ci.yml

205 lines
5.6 KiB
YAML
Raw Normal View History

2018-06-04 23:06:12 +00:00
image: "rust:slim"
stages:
- check
2018-06-23 15:02:02 +00:00
- build
2018-06-04 23:06:12 +00:00
- test
- release
variables:
RUST_VERSION: stable
# Cache rust/cargo/build artifacts
cache:
key: "$CI_PIPELINE_ID-$RUST_VERSION"
paths:
- /usr/local/cargo/registry/
- /usr/local/rustup/toolchains/
- /usr/local/rustup/update-hashes/
- target/
2018-06-04 23:06:12 +00:00
# Install compiler and OpenSSL dependencies
before_script:
2018-06-23 15:02:02 +00:00
- apt-get update
2018-06-04 23:06:12 +00:00
- apt-get install -y --no-install-recommends build-essential pkg-config libssl-dev
2018-06-23 15:02:02 +00:00
- |
rustup install $RUST_VERSION
rustup default $RUST_VERSION
- |
rustc --version
cargo --version
2018-06-04 23:06:12 +00:00
# Variable defaults
variables:
RUST_VERSION: stable
2018-06-04 23:06:12 +00:00
# Check on stable, beta and nightly
.check-base: &check-base
stage: check
script:
2018-06-23 15:02:02 +00:00
- cargo check --verbose
- cargo check --no-default-features --features send2 --verbose
- cargo check --no-default-features --features send3 --verbose
2018-06-23 15:02:02 +00:00
- cargo check --features no-color --verbose
2018-06-18 18:31:36 +00:00
rust-stable:
2018-06-04 23:06:12 +00:00
<<: *check-base
2018-06-18 18:31:36 +00:00
rust-beta:
2018-06-04 23:06:12 +00:00
<<: *check-base
variables:
RUST_VERSION: beta
2018-06-18 18:31:36 +00:00
rust-nightly:
2018-06-04 23:06:12 +00:00
<<: *check-base
variables:
RUST_VERSION: nightly
# rust-old:
# <<: *check-base
# variables:
# RUST_VERSION: "1.26"
2018-06-23 15:02:02 +00:00
# Build using Rust stable
build:
stage: build
script:
- cargo build --release --verbose
- mv target/release/ffsend ./ffsend
artifacts:
name: build-dynamic
paths:
- ffsend
expire_in: 1 month
# Build a static version
build-static:
stage: build
script:
# Install the static target
- rustup target add x86_64-unknown-linux-musl
# Build OpenSSL statically
- apt install -y build-essential wget musl-tools
- wget https://www.openssl.org/source/openssl-1.0.2o.tar.gz
- tar xzvf openssl-1.0.2o.tar.gz
- cd openssl-1.0.2o
- ./config -fPIC --openssldir=/usr/local/ssl --prefix=/usr/local
- make
- make install
- cd ..
# Statically build ffsend
- export OPENSSL_STATIC=1
- export OPENSSL_LIB_DIR=/usr/local/lib
- export OPENSSL_INCLUDE_DIR=/usr/local/include
- cargo build --target=x86_64-unknown-linux-musl --release --verbose
# Prepare the release artifact
- find . -name ffsend -exec ls -lah {} \;
- mv target/x86_64-unknown-linux-musl/release/ffsend ./ffsend
artifacts:
name: build-static
paths:
- ffsend
expire_in: 1 month
2018-06-04 23:06:12 +00:00
# Run the unit tests through Cargo
2018-06-18 18:31:36 +00:00
cargo-test:
2018-06-04 23:06:12 +00:00
stage: test
2018-06-23 15:02:02 +00:00
dependencies: []
2018-06-04 23:06:12 +00:00
script:
2018-06-23 15:02:02 +00:00
- cargo test --verbose
2018-06-04 23:06:12 +00:00
# Run integration test with the public Send service
2018-06-18 18:31:36 +00:00
public-send-test:
2018-06-23 15:02:02 +00:00
stage: test
dependencies:
- build-static
variables:
GIT_STRATEGY: none
before_script: []
2018-06-04 23:06:12 +00:00
script:
# Generate random file, upload/download and assert equality
- "head -c2m </dev/urandom >testfile"
- "./ffsend upload testfile -d=10 -p=secret -I"
- "./ffsend download $(./ffsend history -q) -p=secret -I -o=downloadfile"
2018-11-21 21:12:22 +00:00
- "cmp --silent ./testfile ./downloadfile || (echo ERROR: Downloaded file is different than original; exit 1)"
# Also test Firefox Send v3
- "./ffsend upload --host http://send2.dev.lcip.org/ testfile -d=10 -p=secret -I"
- "./ffsend download $(./ffsend history -q) -p=secret -I -o=downloadfile2"
- "cmp --silent ./testfile ./downloadfile2 || (echo ERROR: Downloaded file is different than original; exit 1)"
# Cargo crate release
crate:
stage: release
only:
- /^v(\d+\.)*\d+$/
script:
- echo "Creating release crate to publish on crates.io..."
- echo $CARGO_TOKEN | cargo login
- echo "Publishing crate to crates.io..."
2018-10-17 18:26:25 +00:00
- cargo publish --verbose --allow-dirty
2019-01-03 13:08:50 +00:00
2019-01-12 22:19:11 +00:00
# AUR package release
pkg-aur:
image: base/archlinux
stage: release
only:
- /^v(\d+\.)*\d+$/
before_script: []
script:
- cd ./pkg/aur
# Update version number in PKGBUILD
- VERSION=$(echo $CI_COMMIT_REF_NAME | cut -c 2-)
- echo "Determined binary version number 'v$VERSION', updating PKGBUILD..."
- sed "s/^pkgver=.*\$/pkgver=$VERSION/" -i PKGBUILD
# Install dependencies
- echo "Installing required build packages..."
- pacman -Syu --noconfirm sudo base-devel binutils openssh rust cargo cmake git openssl
# Make AUR package
- echo "Making AUR package..."
- mkdir -p /.cargo
- chmod -R 777 /.cargo
- sudo -u nobody makepkg -c
- sudo -u nobody makepkg --printsrcinfo > .SRCINFO
# Publish: set up SSH key, clone AUR repo, commit update and push
- mkdir -p /root/.ssh
- cp ./aur.pub /root/.ssh/id_rsa.pub
- echo "$AUR_SSH_PRIVATE" > /root/.ssh/id_rsa
- echo "Host aur.archlinux.org" >> /root/.ssh/config
- echo " IdentityFile /root/.ssh/aur" >> /root/.ssh/config
- echo " User aur" >> /root/.ssh/config
- chmod 600 /root/.ssh/{id_rsa*,config}
- eval `ssh-agent -s`
- ssh-add /root/.ssh/id_rsa
- ssh-keyscan -H aur.archlinux.org >> /root/.ssh/known_hosts
- git config --global user.name "timvisee"
- git config --global user.email "timvisee@gmail.com"
- git clone ssh://aur@aur.archlinux.org/ffsend.git aur-ffsend
- cd aur-ffsend
- cp ../{PKGBUILD,.SRCINFO} ./
- git add PKGBUILD .SRCINFO
- git commit -m "Release v$VERSION"
- git push
2019-01-03 13:08:50 +00:00
# Snap release
snap:
image: snapcore/snapcraft:edge
2019-01-03 13:08:50 +00:00
stage: release
# only:
# - /^v(\d+\.)*\d+$/
before_script: []
script:
- echo "Building snap package..."
- cd pkg/snap
- snapcraft
# TODO: See: https://docs.snapcraft.io/rust-applications/7826
# TODO: - login to registry
# TODO: - test built snap
# TODO: - push snap to snapcraft.io
# - echo "Publishing snap package..."
# - echo "$SNAP_USER\n&SNAP_PASS" | snapcraft login
# - snapcraft push --release=edge ffsend_amd64.snap