2024-03-18 06:30:40 +01:00
name : CI and Artifacts
2023-12-21 01:35:52 +01:00
on :
2024-04-22 17:07:26 +02:00
pull_request :
push :
2024-04-26 05:58:01 +02:00
# documentation workflow deals with this or is not relevant for this workflow
2024-04-26 05:49:17 +02:00
paths-ignore :
- '*.md'
2024-04-26 05:58:01 +02:00
- 'conduwuit-example.toml'
- 'book.toml'
- '.gitlab-ci.yml'
- '.gitignore'
- 'renovate.json'
2024-04-26 05:49:17 +02:00
- 'docs/**'
2024-04-26 05:58:01 +02:00
- 'debian/**'
- 'docker/**'
2024-04-22 17:07:26 +02:00
branches :
- main
2024-07-03 01:56:14 +02:00
- change-ci-cache
2024-05-05 08:18:15 +02:00
tags :
- '*'
2024-04-22 17:07:26 +02:00
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch :
2024-03-17 23:54:53 +01:00
2024-04-26 05:49:17 +02:00
concurrency :
group : ${{ github.head_ref || github.ref_name }}
cancel-in-progress : true
2023-12-21 01:35:52 +01:00
env :
2024-07-27 18:06:06 +02:00
# sccache only on main repo
SCCACHE_GHA_ENABLED : "${{ (github.event.pull_request.draft != true) && (vars.DOCKER_USERNAME != '') && (vars.GITLAB_USERNAME != '') && (vars.SCCACHE_ENDPOINT != '') && (github.event.pull_request.user.login != 'renovate[bot]') && 'true' || 'false' }}"
2024-07-28 05:40:54 +02:00
RUSTC_WRAPPER : "${{ (github.event.pull_request.draft != true) && (vars.DOCKER_USERNAME != '') && (vars.GITLAB_USERNAME != '') && (vars.SCCACHE_ENDPOINT != '') && (github.event.pull_request.user.login != 'renovate[bot]') && 'sccache' || '' }}"
SCCACHE_BUCKET : "${{ (github.event.pull_request.draft != true) && (vars.DOCKER_USERNAME != '') && (vars.GITLAB_USERNAME != '') && (vars.SCCACHE_ENDPOINT != '') && (github.event.pull_request.user.login != 'renovate[bot]') && 'sccache' || '' }}"
2024-07-25 04:22:45 +02:00
SCCACHE_S3_USE_SSL : ${{ vars.SCCACHE_S3_USE_SSL }}
SCCACHE_REGION : ${{ vars.SCCACHE_REGION }}
SCCACHE_ENDPOINT : ${{ vars.SCCACHE_ENDPOINT }}
SCCACHE_CACHE_MULTIARCH : ${{ vars.SCCACHE_CACHE_MULTIARCH }}
AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
2024-04-22 17:07:26 +02:00
# Required to make some things output color
TERM : ansi
# Publishing to my nix binary cache
ATTIC_TOKEN : ${{ secrets.ATTIC_TOKEN }}
2024-06-15 23:32:51 +02:00
# conduwuit.cachix.org
CACHIX_AUTH_TOKEN : ${{ secrets.CACHIX_AUTH_TOKEN }}
2024-04-22 17:07:26 +02:00
# Just in case incremental is still being set to true, speeds up CI
CARGO_INCREMENTAL : 0
# Custom nix binary cache if fork is being used
ATTIC_ENDPOINT : ${{ vars.ATTIC_ENDPOINT }}
ATTIC_PUBLIC_KEY : ${{ vars.ATTIC_PUBLIC_KEY }}
2024-07-14 06:47:56 +02:00
# Get error output from nix that we can actually use, and use our binary caches for the earlier CI steps
NIX_CONFIG : |
show-trace = true
extra-substituters = https://attic.kennel.juneis.dog/conduit https://attic.kennel.juneis.dog/conduwuit https://cache.lix.systems https://conduwuit.cachix.org
extra-trusted-public-keys = conduit:eEKoUwlQGDdYmAI/Q/0slVlegqh/QmAvQd7HBSm21Wk= conduwuit:BbycGUgTISsltcmH0qNjFR9dbrQNYgdIAcmViSGoVTE= cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o= conduwuit.cachix.org-1:MFRm6jcnfTf0jSAbmvLfhO3KBMt4px+1xaereWXp8Xg=
2024-08-22 01:43:28 +02:00
# complement uses libolm
NIXPKGS_ALLOW_INSECURE : 1
2023-12-21 01:35:52 +01:00
2024-03-02 16:59:04 +01:00
permissions :
2024-04-22 17:07:26 +02:00
packages : write
contents : read
2024-03-02 16:59:04 +01:00
2023-12-21 01:35:52 +01:00
jobs :
2024-04-24 13:31:54 +02:00
tests :
2024-04-26 02:11:12 +02:00
name : Test
2024-04-22 17:07:26 +02:00
runs-on : ubuntu-latest
2024-07-26 00:06:45 +02:00
env :
CARGO_PROFILE : "test"
2024-04-22 17:07:26 +02:00
steps :
2024-07-03 18:12:11 +02:00
- name : Free Disk Space (Ubuntu)
uses : jlumbroso/free-disk-space@main
2024-04-22 17:07:26 +02:00
- name : Sync repository
uses : actions/checkout@v4
2024-05-05 08:10:47 +02:00
- name : Tag comparison check
2024-07-16 06:44:47 +02:00
if : ${{ startsWith(github.ref, 'refs/tags/v') && !endsWith(github.ref, '-rc') }}
2024-05-05 08:10:47 +02:00
run : |
# Tag mismatch with latest repo tag check to prevent potential downgrades
LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)
if [ $LATEST_TAG != ${{ github.ref_name }} ]; then
echo '# WARNING : Attempting to run this workflow for a tag that is not the latest repo tag. Aborting.'
echo '# WARNING : Attempting to run this workflow for a tag that is not the latest repo tag. Aborting.' >> $GITHUB_STEP_SUMMARY
exit 1
fi
2024-07-03 01:56:14 +02:00
- uses : nixbuild/nix-quick-install-action@v28
2024-04-24 02:22:14 +02:00
- name : Enable Cachix binary cache
2024-04-22 17:07:26 +02:00
run : |
2024-05-02 05:30:49 +02:00
nix profile install nixpkgs#cachix
2024-04-24 02:22:14 +02:00
cachix use crane
cachix use nix-community
2024-04-22 17:07:26 +02:00
2024-07-03 01:08:30 +02:00
- name : Restore and cache Nix store
2024-07-03 06:13:39 +02:00
uses : nix-community/cache-nix-action@v5.1.0
2024-06-15 23:11:25 +02:00
with :
2024-07-03 01:08:30 +02:00
# restore and save a cache using this key
2024-07-03 01:56:14 +02:00
primary-key : nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/.lock') }}
2024-07-03 01:08:30 +02:00
# if there's no cache hit, restore a cache by this prefix
restore-prefixes-first-match : nix-${{ runner.os }}-
# collect garbage until Nix store size (in bytes) is at most this number
# before trying to save a new cache
2024-07-03 01:56:14 +02:00
gc-max-store-size-linux : 2073741824
2024-07-03 01:08:30 +02:00
# do purge caches
purge : true
# purge all versions of the cache
2024-07-03 01:56:14 +02:00
purge-prefixes : nix-${{ runner.os }}-
2024-07-03 01:08:30 +02:00
# created more than this number of seconds ago relative to the start of the `Post Restore` phase
2024-07-03 01:56:14 +02:00
purge-last-accessed : 86400
2024-07-03 01:08:30 +02:00
# except the version with the `primary-key`, if it exists
purge-primary-key : never
2024-07-03 01:56:14 +02:00
# always save the cache
save-always : true
2024-04-22 17:07:26 +02:00
2024-04-24 02:22:14 +02:00
- name : Apply Nix binary cache configuration
2024-04-22 17:07:26 +02:00
run : |
2024-07-03 01:56:14 +02:00
sudo tee -a "${XDG_CONFIG_HOME:-$HOME/.config}/nix/nix.conf" > /dev/null <<EOF
2024-06-15 23:32:51 +02:00
extra-substituters = https://attic.kennel.juneis.dog/conduit https://attic.kennel.juneis.dog/conduwuit https://cache.lix.systems https://conduwuit.cachix.org
extra-trusted-public-keys = conduit:eEKoUwlQGDdYmAI/Q/0slVlegqh/QmAvQd7HBSm21Wk= conduwuit:BbycGUgTISsltcmH0qNjFR9dbrQNYgdIAcmViSGoVTE= cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o= conduwuit.cachix.org-1:MFRm6jcnfTf0jSAbmvLfhO3KBMt4px+1xaereWXp8Xg=
2024-04-24 02:22:14 +02:00
EOF
2024-04-22 17:07:26 +02:00
2024-04-24 02:22:14 +02:00
- name : Use alternative Nix binary caches if specified
if : ${{ (env.ATTIC_ENDPOINT != '') && (env.ATTIC_PUBLIC_KEY != '') }}
run : |
2024-07-03 01:56:14 +02:00
sudo tee -a "${XDG_CONFIG_HOME:-$HOME/.config}/nix/nix.conf" > /dev/null <<EOF
2024-04-24 02:22:14 +02:00
extra-substituters = ${{ env.ATTIC_ENDPOINT }}
extra-trusted-public-keys = ${{ env.ATTIC_PUBLIC_KEY }}
EOF
2024-04-22 17:07:26 +02:00
2024-04-26 02:11:12 +02:00
- name : Prepare build environment
2024-04-24 02:22:14 +02:00
run : |
echo 'source $HOME/.nix-profile/share/nix-direnv/direnvrc' > "$HOME/.direnvrc"
2024-08-22 01:43:28 +02:00
nix profile install --impure --inputs-from . nixpkgs#direnv nixpkgs#nix-direnv
2024-04-24 02:22:14 +02:00
direnv allow
2024-08-22 01:43:28 +02:00
nix develop .#all-features --command true --impure
2024-04-22 17:07:26 +02:00
2024-05-24 19:09:30 +02:00
- name : Cache CI dependencies
run : |
2024-07-25 04:45:27 +02:00
# attic nix binary cache server is very, very terribly flakey. nothing i can do to fix it other than retry multiple times here
ATTEMPTS=3
SUCCESS=false
while (( ATTEMPTS-- > 0 ))
do
bin/nix-build-and-cache ci
if [[ $? == 0 ]]; then
SUCCESS=true
break
else
sleep 3
fi
done
if [[ $SUCCESS == "false" ]]; then
exit 1
fi
2024-07-03 18:12:11 +02:00
2024-07-25 04:22:45 +02:00
# use sccache for Rust
- name : Run sccache-cache
2024-07-27 18:06:06 +02:00
if : (github.event.pull_request.draft != true) && (vars.DOCKER_USERNAME != '') && (vars.GITLAB_USERNAME != '') && (vars.SCCACHE_ENDPOINT != '') && (github.event.pull_request.user.login != 'renovate[bot]')
2024-07-25 04:22:45 +02:00
uses : mozilla-actions/sccache-action@main
# use rust-cache
2024-07-03 03:39:49 +02:00
- uses : Swatinem/rust-cache@v2
2024-07-25 05:33:38 +02:00
with :
cache-all-crates : "true"
2024-05-24 19:09:30 +02:00
2024-04-24 02:22:14 +02:00
- name : Run CI tests
run : |
2024-04-26 02:11:12 +02:00
direnv exec . engage > >(tee -a test_output.log)
2024-05-02 04:38:22 +02:00
- name : Run Complement tests
run : |
2024-07-07 03:15:44 +02:00
# the nix devshell sets $COMPLEMENT_SRC, so "/dev/null" is no-op
direnv exec . bin/complement "/dev/null" complement_test_logs.jsonl complement_test_results.jsonl > >(tee -a test_output.log)
2024-05-12 06:22:10 +02:00
cp -v -f result complement_oci_image.tar.gz
- name : Upload Complement OCI image
uses : actions/upload-artifact@v4
with :
name : complement_oci_image.tar.gz
path : complement_oci_image.tar.gz
if-no-files-found : error
2024-05-02 04:38:22 +02:00
- name : Upload Complement logs
uses : actions/upload-artifact@v4
with :
name : complement_test_logs.jsonl
path : complement_test_logs.jsonl
if-no-files-found : error
- name : Upload Complement results
uses : actions/upload-artifact@v4
with :
name : complement_test_results.jsonl
path : complement_test_results.jsonl
if-no-files-found : error
2024-05-02 19:00:47 +02:00
- name : Diff Complement results with checked-in repo results
run : |
2024-07-07 03:15:44 +02:00
diff -u --color=always tests/test_results/complement/test_results.jsonl complement_test_results.jsonl > >(tee -a complement_diff_output.log)
2024-05-02 04:53:16 +02:00
2024-04-26 02:11:12 +02:00
- name : Update Job Summary
if : success() || failure()
run : |
if [ ${{ job.status }} == 'success' ]; then
2024-04-26 03:16:14 +02:00
echo '# ✅ completed suwuccessfully' >> $GITHUB_STEP_SUMMARY
2024-04-26 02:11:12 +02:00
else
2024-07-05 21:50:49 +02:00
echo '# CI failure' >> $GITHUB_STEP_SUMMARY
2024-04-26 02:11:12 +02:00
echo '```' >> $GITHUB_STEP_SUMMARY
2024-06-15 23:01:32 +02:00
tail -n 40 test_output.log | sed 's/\x1b\[[0-9;]*m//g' >> $GITHUB_STEP_SUMMARY
2024-04-26 02:11:12 +02:00
echo '```' >> $GITHUB_STEP_SUMMARY
2024-07-05 21:50:49 +02:00
echo '# Complement diff results' >> $GITHUB_STEP_SUMMARY
echo '```diff' >> $GITHUB_STEP_SUMMARY
2024-07-07 03:15:44 +02:00
tail -n 100 complement_diff_output.log | sed 's/\x1b\[[0-9;]*m//g' >> $GITHUB_STEP_SUMMARY
2024-07-05 21:50:49 +02:00
echo '```' >> $GITHUB_STEP_SUMMARY
2024-04-26 02:11:12 +02:00
fi
2024-04-22 17:07:26 +02:00
2024-07-26 03:33:34 +02:00
- name : Run cargo clean test artifacts
run : |
cargo clean --profile test
2024-04-24 02:22:14 +02:00
build :
name : Build
2024-04-22 17:07:26 +02:00
runs-on : ubuntu-latest
2024-04-24 13:31:54 +02:00
needs : tests
2024-04-22 17:07:26 +02:00
strategy :
matrix :
2024-04-24 02:22:14 +02:00
include :
- target : aarch64-unknown-linux-musl
- target : x86_64-unknown-linux-musl
2024-04-22 17:07:26 +02:00
steps :
2024-07-26 03:33:34 +02:00
- name : Free Disk Space (Ubuntu)
uses : jlumbroso/free-disk-space@main
2024-04-22 17:07:26 +02:00
- name : Sync repository
uses : actions/checkout@v4
2024-07-03 04:51:59 +02:00
- uses : nixbuild/nix-quick-install-action@v28
2024-04-24 02:22:14 +02:00
2024-07-03 04:51:59 +02:00
- name : Enable Cachix binary cache
2024-04-22 17:07:26 +02:00
run : |
2024-05-02 05:30:49 +02:00
nix profile install nixpkgs#cachix
2024-04-24 02:22:14 +02:00
cachix use crane
cachix use nix-community
2024-04-22 17:07:26 +02:00
2024-07-03 04:51:59 +02:00
- name : Restore and cache Nix store
2024-07-03 06:13:39 +02:00
uses : nix-community/cache-nix-action@v5.1.0
2024-06-17 00:54:03 +02:00
with :
2024-07-03 04:51:59 +02:00
# restore and save a cache using this key
primary-key : nix-${{ runner.os }}-${{ matrix.target }}-${{ hashFiles('**/*.nix', '**/.lock') }}
# if there's no cache hit, restore a cache by this prefix
restore-prefixes-first-match : nix-${{ runner.os }}-
# collect garbage until Nix store size (in bytes) is at most this number
# before trying to save a new cache
gc-max-store-size-linux : 2073741824
# do purge caches
purge : true
# purge all versions of the cache
purge-prefixes : nix-${{ runner.os }}-
# created more than this number of seconds ago relative to the start of the `Post Restore` phase
purge-last-accessed : 86400
# except the version with the `primary-key`, if it exists
purge-primary-key : never
# always save the cache
save-always : true
2024-04-22 17:07:26 +02:00
2024-04-24 02:22:14 +02:00
- name : Apply Nix binary cache configuration
2024-04-22 17:07:26 +02:00
run : |
2024-07-03 04:51:59 +02:00
sudo tee -a "${XDG_CONFIG_HOME:-$HOME/.config}/nix/nix.conf" > /dev/null <<EOF
2024-06-17 00:54:03 +02:00
extra-substituters = https://attic.kennel.juneis.dog/conduit https://attic.kennel.juneis.dog/conduwuit https://cache.lix.systems https://conduwuit.cachix.org
extra-trusted-public-keys = conduit:eEKoUwlQGDdYmAI/Q/0slVlegqh/QmAvQd7HBSm21Wk= conduwuit:BbycGUgTISsltcmH0qNjFR9dbrQNYgdIAcmViSGoVTE= cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o= conduwuit.cachix.org-1:MFRm6jcnfTf0jSAbmvLfhO3KBMt4px+1xaereWXp8Xg=
2024-04-24 02:22:14 +02:00
EOF
2024-04-22 17:07:26 +02:00
2024-04-24 02:22:14 +02:00
- name : Use alternative Nix binary caches if specified
if : ${{ (env.ATTIC_ENDPOINT != '') && (env.ATTIC_PUBLIC_KEY != '') }}
run : |
2024-07-03 04:51:59 +02:00
sudo tee -a "${XDG_CONFIG_HOME:-$HOME/.config}/nix/nix.conf" > /dev/null <<EOF
2024-04-24 02:22:14 +02:00
extra-substituters = ${{ env.ATTIC_ENDPOINT }}
extra-trusted-public-keys = ${{ env.ATTIC_PUBLIC_KEY }}
EOF
2024-04-22 17:07:26 +02:00
2024-04-26 02:11:12 +02:00
- name : Prepare build environment
2024-04-24 02:22:14 +02:00
run : |
echo 'source $HOME/.nix-profile/share/nix-direnv/direnvrc' > "$HOME/.direnvrc"
2024-08-22 01:43:28 +02:00
nix profile install --impure --inputs-from . nixpkgs#direnv nixpkgs#nix-direnv
2024-04-24 02:22:14 +02:00
direnv allow
2024-08-22 01:43:28 +02:00
nix develop .#all-features --command true --impure
2024-04-22 17:07:26 +02:00
2024-07-25 04:22:45 +02:00
# use sccache for Rust
- name : Run sccache-cache
2024-07-27 18:06:06 +02:00
if : (github.event.pull_request.draft != true) && (vars.DOCKER_USERNAME != '') && (vars.GITLAB_USERNAME != '') && (vars.SCCACHE_ENDPOINT != '') && (github.event.pull_request.user.login != 'renovate[bot]')
2024-07-25 04:22:45 +02:00
uses : mozilla-actions/sccache-action@main
# use rust-cache
- uses : Swatinem/rust-cache@v2
2024-07-25 05:33:38 +02:00
with :
cache-all-crates : "true"
2024-07-25 04:22:45 +02:00
2024-04-24 02:22:14 +02:00
- name : Build static ${{ matrix.target }}
2024-04-22 17:07:26 +02:00
run : |
2024-05-14 00:19:59 +02:00
CARGO_DEB_TARGET_TUPLE=$(echo ${{ matrix.target }} | grep -o -E '^([^-]*-){3}[^-]*')
2024-06-15 23:13:04 +02:00
SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)
2024-05-14 00:19:59 +02:00
2024-07-25 04:45:27 +02:00
# attic nix binary cache server is very, very terribly flakey. nothing i can do to fix it other than retry multiple times here
ATTEMPTS=3
SUCCESS=false
while (( ATTEMPTS-- > 0 ))
do
bin/nix-build-and-cache just .#static-${{ matrix.target }}-all-features
if [[ $? == 0 ]]; then
SUCCESS=true
break
else
sleep 3
fi
done
if [[ $SUCCESS == "false" ]]; then
exit 1
fi
2024-05-14 04:14:38 +02:00
mkdir -v -p target/release/
mkdir -v -p target/$CARGO_DEB_TARGET_TUPLE/release/
cp -v -f result/bin/conduit target/release/conduwuit
cp -v -f result/bin/conduit target/$CARGO_DEB_TARGET_TUPLE/release/conduwuit
2024-05-19 04:32:02 +02:00
# -p conduit is the main crate name
direnv exec . cargo deb --verbose --no-build --no-strip -p conduit --target=$CARGO_DEB_TARGET_TUPLE --output target/release/${{ matrix.target }}.deb
2024-05-14 04:14:38 +02:00
mv -v target/release/conduwuit static-${{ matrix.target }}
mv -v target/release/${{ matrix.target }}.deb ${{ matrix.target }}.deb
2024-04-22 17:07:26 +02:00
2024-07-25 01:32:26 +02:00
# quick smoke test of the x86_64 static release binary
- name : Run x86_64 static release binary
run : |
# GH actions default runners are x86_64 only
if file result/bin/conduit | grep x86-64; then
result/bin/conduit --version
fi
- name : Build static debug ${{ matrix.target }}
run : |
CARGO_DEB_TARGET_TUPLE=$(echo ${{ matrix.target }} | grep -o -E '^([^-]*-){3}[^-]*')
SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)
2024-07-25 04:45:27 +02:00
# attic nix binary cache server is very, very terribly flakey. nothing i can do to fix it other than retry multiple times here
ATTEMPTS=3
SUCCESS=false
while (( ATTEMPTS-- > 0 ))
do
bin/nix-build-and-cache just .#static-${{ matrix.target }}-all-features-debug
if [[ $? == 0 ]]; then
SUCCESS=true
break
else
sleep 3
fi
done
if [[ $SUCCESS == "false" ]]; then
exit 1
fi
2024-07-25 01:32:26 +02:00
# > warning: dev profile is not supported and will be a hard error in the future. cargo-deb is for making releases, and it doesn't make sense to use it with dev profiles.
# so we need to coerce cargo-deb into thinking this is a release binary
mkdir -v -p target/release/
mkdir -v -p target/$CARGO_DEB_TARGET_TUPLE/release/
cp -v -f result/bin/conduit target/release/conduwuit
cp -v -f result/bin/conduit target/$CARGO_DEB_TARGET_TUPLE/release/conduwuit
# -p conduit is the main crate name
direnv exec . cargo deb --verbose --no-build --no-strip -p conduit --target=$CARGO_DEB_TARGET_TUPLE --output target/release/${{ matrix.target }}-debug.deb
mv -v target/release/conduwuit static-${{ matrix.target }}-debug
mv -v target/release/${{ matrix.target }}-debug.deb ${{ matrix.target }}-debug.deb
# quick smoke test of the x86_64 static debug binary
- name : Run x86_64 static debug binary
2024-07-18 04:57:51 +02:00
run : |
# GH actions default runners are x86_64 only
if file result/bin/conduit | grep x86-64; then
result/bin/conduit --version
fi
2024-07-25 01:40:53 +02:00
# check validity of produced deb package, invalid debs will error on these commands
- name : Validate produced deb package
run : |
# List contents
dpkg-deb --contents ${{ matrix.target }}.deb
dpkg-deb --contents ${{ matrix.target }}-debug.deb
# List info
dpkg-deb --info ${{ matrix.target }}.deb
dpkg-deb --info ${{ matrix.target }}-debug.deb
2024-04-24 02:22:14 +02:00
- name : Upload static-${{ matrix.target }}
2024-04-22 17:07:26 +02:00
uses : actions/upload-artifact@v4
with :
name : static-${{ matrix.target }}
2024-04-24 13:31:54 +02:00
path : static-${{ matrix.target }}
2024-04-22 17:07:26 +02:00
if-no-files-found : error
2024-04-24 02:22:14 +02:00
- name : Upload deb ${{ matrix.target }}
2024-04-22 17:07:26 +02:00
uses : actions/upload-artifact@v4
with :
2024-04-24 13:31:54 +02:00
name : deb-${{ matrix.target }}
2024-05-13 23:35:23 +02:00
path : ${{ matrix.target }}.deb
2024-04-22 17:07:26 +02:00
if-no-files-found : error
2024-05-14 04:14:38 +02:00
compression-level : 0
2024-04-22 17:07:26 +02:00
2024-07-25 01:32:26 +02:00
- name : Upload static-${{ matrix.target }}-debug
uses : actions/upload-artifact@v4
with :
name : static-${{ matrix.target }}-debug
path : static-${{ matrix.target }}-debug
if-no-files-found : error
- name : Upload deb ${{ matrix.target }}-debug
uses : actions/upload-artifact@v4
with :
name : deb-${{ matrix.target }}-debug
path : ${{ matrix.target }}-debug.deb
if-no-files-found : error
compression-level : 0
2024-04-24 02:22:14 +02:00
- name : Build OCI image ${{ matrix.target }}
2024-04-22 17:07:26 +02:00
run : |
2024-07-25 04:45:27 +02:00
# attic nix binary cache server is very, very terribly flakey. nothing i can do to fix it other than retry multiple times here
ATTEMPTS=3
SUCCESS=false
while (( ATTEMPTS-- > 0 ))
do
bin/nix-build-and-cache just .#oci-image-${{ matrix.target }}-all-features
if [[ $? == 0 ]]; then
SUCCESS=true
break
else
sleep 3
fi
done
if [[ $SUCCESS == "false" ]]; then
exit 1
fi
2024-04-24 02:22:14 +02:00
cp -v -f result oci-image-${{ matrix.target }}.tar.gz
2024-04-22 17:07:26 +02:00
2024-07-25 01:32:26 +02:00
- name : Build debug OCI image ${{ matrix.target }}
run : |
2024-07-25 04:45:27 +02:00
# attic nix binary cache server is very, very terribly flakey. nothing i can do to fix it other than retry multiple times here
ATTEMPTS=3
SUCCESS=false
while (( ATTEMPTS-- > 0 ))
do
bin/nix-build-and-cache just .#oci-image-${{ matrix.target }}-all-features-debug
if [[ $? == 0 ]]; then
SUCCESS=true
break
else
sleep 3
fi
done
if [[ $SUCCESS == "false" ]]; then
exit 1
fi
2024-07-25 01:32:26 +02:00
cp -v -f result oci-image-${{ matrix.target }}-debug.tar.gz
2024-04-24 02:22:14 +02:00
- name : Upload OCI image ${{ matrix.target }}
2024-04-22 17:07:26 +02:00
uses : actions/upload-artifact@v4
with :
2024-04-24 13:31:54 +02:00
name : oci-image-${{ matrix.target }}
2024-04-24 02:22:14 +02:00
path : oci-image-${{ matrix.target }}.tar.gz
2024-04-22 17:07:26 +02:00
if-no-files-found : error
compression-level : 0
2024-07-25 01:32:26 +02:00
- name : Upload OCI image ${{ matrix.target }}-debug
uses : actions/upload-artifact@v4
with :
name : oci-image-${{ matrix.target }}-debug
path : oci-image-${{ matrix.target }}-debug.tar.gz
if-no-files-found : error
compression-level : 0
2024-04-24 02:22:14 +02:00
docker :
2024-04-26 02:11:12 +02:00
name : Docker publish
2024-04-22 17:07:26 +02:00
runs-on : ubuntu-latest
2024-04-24 02:22:14 +02:00
needs : build
2024-07-01 05:36:07 +02:00
if : (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main' || (github.event.pull_request.draft != true)) && (vars.DOCKER_USERNAME != '') && (vars.GITLAB_USERNAME != '') && github.event.pull_request.user.login != 'renovate[bot]'
2024-04-26 02:11:12 +02:00
env :
2024-05-07 07:56:26 +02:00
DOCKER_ARM64 : docker.io/${{ github.repository }}:${{ (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}-${{ github.sha }}-arm64v8
DOCKER_AMD64 : docker.io/${{ github.repository }}:${{ (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}-${{ github.sha }}-amd64
DOCKER_TAG : docker.io/${{ github.repository }}:${{ (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}-${{ github.sha }}
2024-07-16 06:44:47 +02:00
DOCKER_BRANCH : docker.io/${{ github.repository }}:${{ (startsWith(github.ref, 'refs/tags/v') && !endsWith(github.ref, '-rc') && 'latest') || (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}
2024-05-07 07:56:26 +02:00
GHCR_ARM64 : ghcr.io/${{ github.repository }}:${{ (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}-${{ github.sha }}-arm64v8
GHCR_AMD64 : ghcr.io/${{ github.repository }}:${{ (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}-${{ github.sha }}-amd64
GHCR_TAG : ghcr.io/${{ github.repository }}:${{ (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}-${{ github.sha }}
2024-07-16 06:44:47 +02:00
GHCR_BRANCH : ghcr.io/${{ github.repository }}:${{ (startsWith(github.ref, 'refs/tags/v') && !endsWith(github.ref, '-rc') && 'latest') || (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}
2024-05-08 20:11:25 +02:00
GLCR_ARM64 : registry.gitlab.com/conduwuit/conduwuit:${{ (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}-${{ github.sha }}-arm64v8
GLCR_AMD64 : registry.gitlab.com/conduwuit/conduwuit:${{ (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}-${{ github.sha }}-amd64
GLCR_TAG : registry.gitlab.com/conduwuit/conduwuit:${{ (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}-${{ github.sha }}
2024-07-16 06:44:47 +02:00
GLCR_BRANCH : registry.gitlab.com/conduwuit/conduwuit:${{ (startsWith(github.ref, 'refs/tags/v') && !endsWith(github.ref, '-rc') && 'latest') || (github.head_ref != '' && format('merge-{0}-{1}', github.event.number, github.event.pull_request.user.login)) || github.ref_name }}
2024-05-06 02:13:52 +02:00
2024-04-27 02:46:08 +02:00
DOCKERHUB_TOKEN : ${{ secrets.DOCKERHUB_TOKEN }}
2024-05-03 05:19:05 +02:00
GITLAB_TOKEN : ${{ secrets.GITLAB_TOKEN }}
2024-04-22 17:07:26 +02:00
steps :
- name : Login to GitHub Container Registry
uses : docker/login-action@v3
with :
registry : ghcr.io
2024-04-25 03:41:41 +02:00
username : ${{ github.actor }}
2024-04-22 17:07:26 +02:00
password : ${{ secrets.GITHUB_TOKEN }}
- name : Login to Docker Hub
2024-04-27 02:46:08 +02:00
if : ${{ (vars.DOCKER_USERNAME != '') && (env.DOCKERHUB_TOKEN != '') }}
2024-04-22 17:07:26 +02:00
uses : docker/login-action@v3
with :
2024-04-25 03:41:41 +02:00
registry : docker.io
username : ${{ vars.DOCKER_USERNAME }}
password : ${{ secrets.DOCKERHUB_TOKEN }}
2024-04-24 02:22:14 +02:00
2024-05-03 05:19:05 +02:00
- name : Login to GitLab Container Registry
if : ${{ (vars.GITLAB_USERNAME != '') && (env.GITLAB_TOKEN != '') }}
uses : docker/login-action@v3
with :
registry : registry.gitlab.com
username : ${{ vars.GITLAB_USERNAME }}
password : ${{ secrets.GITLAB_TOKEN }}
2024-04-25 03:41:41 +02:00
- name : Download artifacts
uses : actions/download-artifact@v4
2024-04-26 02:11:12 +02:00
- name : Move OCI images into position
2024-04-22 17:07:26 +02:00
run : |
2024-07-25 01:32:26 +02:00
mv -v oci-image-x86_64-unknown-linux-musl/*.tar.gz oci-image-amd64.tar.gz
mv -v oci-image-aarch64-unknown-linux-musl/*.tar.gz oci-image-arm64v8.tar.gz
mv -v oci-image-x86_64-unknown-linux-musl-debug/*.tar.gz oci-image-amd64-debug.tar.gz
mv -v oci-image-aarch64-unknown-linux-musl-debug/*.tar.gz oci-image-arm64v8-debug.tar.gz
2024-04-25 03:41:41 +02:00
2024-04-26 02:11:12 +02:00
- name : Load and push amd64 image
2024-04-27 02:46:08 +02:00
if : ${{ (vars.DOCKER_USERNAME != '') && (env.DOCKERHUB_TOKEN != '') }}
2024-04-26 02:11:12 +02:00
run : |
docker load -i oci-image-amd64.tar.gz
docker tag $(docker images -q conduit:main) ${{ env.DOCKER_AMD64 }}
docker tag $(docker images -q conduit:main) ${{ env.GHCR_AMD64 }}
2024-05-03 05:19:05 +02:00
docker tag $(docker images -q conduit:main) ${{ env.GLCR_AMD64 }}
2024-04-26 02:11:12 +02:00
docker push ${{ env.DOCKER_AMD64 }}
docker push ${{ env.GHCR_AMD64 }}
2024-05-03 05:19:05 +02:00
docker push ${{ env.GLCR_AMD64 }}
2024-04-26 02:11:12 +02:00
- name : Load and push arm64 image
2024-04-27 02:46:08 +02:00
if : ${{ (vars.DOCKER_USERNAME != '') && (env.DOCKERHUB_TOKEN != '') }}
2024-04-26 02:11:12 +02:00
run : |
docker load -i oci-image-arm64v8.tar.gz
docker tag $(docker images -q conduit:main) ${{ env.DOCKER_ARM64 }}
docker tag $(docker images -q conduit:main) ${{ env.GHCR_ARM64 }}
2024-05-03 05:19:05 +02:00
docker tag $(docker images -q conduit:main) ${{ env.GLCR_ARM64 }}
2024-04-26 02:11:12 +02:00
docker push ${{ env.DOCKER_ARM64 }}
docker push ${{ env.GHCR_ARM64 }}
2024-05-03 05:19:05 +02:00
docker push ${{ env.GLCR_ARM64 }}
2024-04-26 02:11:12 +02:00
2024-07-25 01:32:26 +02:00
- name : Load and push amd64 debug image
if : ${{ (vars.DOCKER_USERNAME != '') && (env.DOCKERHUB_TOKEN != '') }}
run : |
docker load -i oci-image-amd64-debug.tar.gz
docker tag $(docker images -q conduit:main) ${{ env.DOCKER_AMD64 }}-debug
docker tag $(docker images -q conduit:main) ${{ env.GHCR_AMD64 }}-debug
docker tag $(docker images -q conduit:main) ${{ env.GLCR_AMD64 }}-debug
docker push ${{ env.DOCKER_AMD64 }}-debug
docker push ${{ env.GHCR_AMD64 }}-debug
docker push ${{ env.GLCR_AMD64 }}-debug
- name : Load and push arm64 debug image
if : ${{ (vars.DOCKER_USERNAME != '') && (env.DOCKERHUB_TOKEN != '') }}
run : |
docker load -i oci-image-arm64v8-debug.tar.gz
docker tag $(docker images -q conduit:main) ${{ env.DOCKER_ARM64 }}-debug
docker tag $(docker images -q conduit:main) ${{ env.GHCR_ARM64 }}-debug
docker tag $(docker images -q conduit:main) ${{ env.GLCR_ARM64 }}-debug
docker push ${{ env.DOCKER_ARM64 }}-debug
docker push ${{ env.GHCR_ARM64 }}-debug
docker push ${{ env.GLCR_ARM64 }}-debug
2024-04-26 02:11:12 +02:00
- name : Create Docker combined manifests
run : |
2024-05-03 05:19:05 +02:00
# Dockerhub Container Registry
2024-04-26 02:11:12 +02:00
docker manifest create ${{ env.DOCKER_TAG }} --amend ${{ env.DOCKER_ARM64 }} --amend ${{ env.DOCKER_AMD64 }}
docker manifest create ${{ env.DOCKER_BRANCH }} --amend ${{ env.DOCKER_ARM64 }} --amend ${{ env.DOCKER_AMD64 }}
2024-05-03 05:19:05 +02:00
# GitHub Container Registry
2024-04-26 02:11:12 +02:00
docker manifest create ${{ env.GHCR_TAG }} --amend ${{ env.GHCR_ARM64 }} --amend ${{ env.GHCR_AMD64 }}
docker manifest create ${{ env.GHCR_BRANCH }} --amend ${{ env.GHCR_ARM64 }} --amend ${{ env.GHCR_AMD64 }}
2024-05-03 05:19:05 +02:00
# GitLab Container Registry
2024-07-25 01:32:26 +02:00
docker manifest create ${{ env.GLCR_TAG }} --amend ${{ env.GLCR_ARM64 }} --amend ${{ env.GLCR_AMD64 }}
2024-05-03 05:19:05 +02:00
docker manifest create ${{ env.GLCR_BRANCH }} --amend ${{ env.GLCR_ARM64 }} --amend ${{ env.GLCR_AMD64 }}
2024-04-26 02:11:12 +02:00
2024-07-25 01:32:26 +02:00
- name : Create Docker combined debug manifests
run : |
# Dockerhub Container Registry
docker manifest create ${{ env.DOCKER_TAG }}-debug --amend ${{ env.DOCKER_ARM64 }}-debug --amend ${{ env.DOCKER_AMD64 }}-debug
docker manifest create ${{ env.DOCKER_BRANCH }}-debug --amend ${{ env.DOCKER_ARM64 }}-debug --amend ${{ env.DOCKER_AMD64 }}-debug
# GitHub Container Registry
docker manifest create ${{ env.GHCR_TAG }}-debug --amend ${{ env.GHCR_ARM64 }}-debug --amend ${{ env.GHCR_AMD64 }}-debug
docker manifest create ${{ env.GHCR_BRANCH }}-debug --amend ${{ env.GHCR_ARM64 }}-debug --amend ${{ env.GHCR_AMD64 }}-debug
# GitLab Container Registry
docker manifest create ${{ env.GLCR_TAG }}-debug --amend ${{ env.GLCR_ARM64 }}-debug --amend ${{ env.GLCR_AMD64 }}-debug
docker manifest create ${{ env.GLCR_BRANCH }}-debug --amend ${{ env.GLCR_ARM64 }}-debug --amend ${{ env.GLCR_AMD64 }}-debug
2024-04-26 02:11:12 +02:00
- name : Push manifests to Docker registries
2024-04-27 02:46:08 +02:00
if : ${{ (vars.DOCKER_USERNAME != '') && (env.DOCKERHUB_TOKEN != '') }}
2024-04-26 02:11:12 +02:00
run : |
docker manifest push ${{ env.DOCKER_TAG }}
docker manifest push ${{ env.DOCKER_BRANCH }}
docker manifest push ${{ env.GHCR_TAG }}
docker manifest push ${{ env.GHCR_BRANCH }}
2024-05-03 05:19:05 +02:00
docker manifest push ${{ env.GLCR_TAG }}
docker manifest push ${{ env.GLCR_BRANCH }}
2024-07-25 01:32:26 +02:00
docker manifest push ${{ env.DOCKER_TAG }}-debug
docker manifest push ${{ env.DOCKER_BRANCH }}-debug
docker manifest push ${{ env.GHCR_TAG }}-debug
docker manifest push ${{ env.GHCR_BRANCH }}-debug
docker manifest push ${{ env.GLCR_TAG }}-debug
docker manifest push ${{ env.GLCR_BRANCH }}-debug
2024-04-22 17:07:26 +02:00
2024-04-26 02:11:12 +02:00
- name : Add Image Links to Job Summary
2024-04-27 02:46:08 +02:00
if : ${{ (vars.DOCKER_USERNAME != '') && (env.DOCKERHUB_TOKEN != '') }}
2024-04-26 02:11:12 +02:00
run : |
echo "- \`docker pull ${{ env.DOCKER_TAG }}\`" >> $GITHUB_STEP_SUMMARY
echo "- \`docker pull ${{ env.GHCR_TAG }}\`" >> $GITHUB_STEP_SUMMARY
2024-05-03 05:19:05 +02:00
echo "- \`docker pull ${{ env.GLCR_TAG }}\`" >> $GITHUB_STEP_SUMMARY
2024-07-25 01:32:26 +02:00
echo "- \`docker pull ${{ env.DOCKER_TAG }}-debug\`" >> $GITHUB_STEP_SUMMARY
echo "- \`docker pull ${{ env.GHCR_TAG }}-debug\`" >> $GITHUB_STEP_SUMMARY
echo "- \`docker pull ${{ env.GLCR_TAG }}-debug\`" >> $GITHUB_STEP_SUMMARY