Skip to content

Pull latest configurations. #1332

Pull latest configurations.

Pull latest configurations. #1332

name: Continuous Integration
on:
workflow_dispatch:
pull_request:
branches: [ "master" ]
push:
branches: [ "master", "v*.*" ]
tags: [ "*.*.*" ]
jobs:
# █████████ ███████████ ███ ████ █████
# ███░░░░░███ ░░███░░░░░███ ░░░ ░░███ ░░███
# ░███ ░░░ ██████ ████████ █████ █████ ██████ ████████ ░███ ░███ █████ ████ ████ ░███ ███████
# ░░█████████ ███░░███░░███░░███░░███ ░░███ ███░░███░░███░░███ ░██████████ ░░███ ░███ ░░███ ░███ ███░░███
# ░░░░░░░░███░███████ ░███ ░░░ ░███ ░███ ░███████ ░███ ░░░ ░███░░░░░███ ░███ ░███ ░███ ░███ ░███ ░███
# ███ ░███░███░░░ ░███ ░░███ ███ ░███░░░ ░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███
# ░░█████████ ░░██████ █████ ░░█████ ░░██████ █████ ███████████ ░░████████ █████ █████░░████████
# ░░░░░░░░░ ░░░░░░ ░░░░░ ░░░░░ ░░░░░░ ░░░░░ ░░░░░░░░░░░ ░░░░░░░░ ░░░░░ ░░░░░ ░░░░░░░░
server_build:
strategy:
matrix:
os: [ linux ]
arch: [ x86_64, aarch64 ]
compiler: [ ghc94 ]
devx-version: [ 54ea65610338600bd4c4afd04b0b6ff612988fd4 ]
runs-on: ${{ matrix.os == 'linux' && matrix.arch == 'aarch64' && 'buildjet-16vcpu-ubuntu-2204-arm' || 'ubuntu-22.04' }}
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v3
with:
submodules: true
- name: 📝 Version
id: version
shell: bash
working-directory: server
run: |
VERSION=$(cat package.yaml | grep "version:" | sed "s/[^0-9]*\([0-9]\)\(.[0-9].[0-9]\)*/\1\2/")
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Install Nix with good defaults
uses: cachix/install-nix-action@v22
with:
extra_nix_config: |
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=
substituters = https://cache.iog.io/ https://cache.nixos.org/
nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v14
with:
name: cardano-ogmios
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- name: ❄️ Prepare cache (x86_64)
if: ${{ matrix.arch == 'x86_64' }}
working-directory: server
run: |
nix develop github:input-output-hk/devx/${{ matrix.devx-version}}#${{ matrix.compiler }}-static-minimal-iog --no-write-lock-file --refresh --command bash -c "cat /nix/store/vd865r55pdbndjwh994h90m35qq77x44-cabal.project.local >> cabal.project.local && cabal update && cabal freeze"
- name: ❄️ Prepare cache (aarch64)
if: ${{ matrix.arch == 'aarch64' }}
working-directory: server
run: |
nix develop github:input-output-hk/devx/${{ matrix.devx-version}}#${{ matrix.compiler }}-static-minimal-iog --no-write-lock-file --refresh --command bash -c "cat /nix/store/hviyb5sciblcyr5fc3vsqcwmfh1nz69w-cabal.project.local >> cabal.project.local && cabal update && cabal freeze"
- name: 💾 Download Cache
uses: actions/cache/restore@v3
with:
path: |
~/.cabal-static/packages
~/.cabal-static/store
server/dist-newstyle
key: cabal-cache-${{ runner.os }}-${{ matrix.arch }}-${{ matrix.compiler }}-${{ hashFiles('server/cabal.project.freeze') }}
restore-keys: |
cabal-cache-${{ runner.os }}-${{ matrix.arch }}-${{ matrix.compiler }}
- name: 🔨 Dependencies
working-directory: server
run: |
nix develop github:input-output-hk/devx/${{ matrix.devx-version }}#${{ matrix.compiler }}-static-minimal-iog --no-write-lock-file --refresh --command bash -c "cabal build --enable-executable-static --only-dependencies ogmios:lib:ogmios"
env:
GIT_SHA: ${{ github.sha }}
- name: 💾 Save Cache
uses: actions/cache/save@v3
with:
path: |
~/.cabal-static/packages
~/.cabal-static/store
server/dist-newstyle
key: cabal-cache-${{ runner.os }}-${{ matrix.arch }}-${{ matrix.compiler }}-${{ hashFiles('server/cabal.project.freeze') }}
- name: 🔨 Build
working-directory: server
run: |
nix develop github:input-output-hk/devx/${{ matrix.devx-version }}#${{ matrix.compiler }}-static-minimal-iog --no-write-lock-file --refresh --command bash -c "cabal build --enable-executable-static ogmios:exe:ogmios"
env:
GIT_SHA: ${{ github.sha }}
- name: 📦 Package
run: |
mkdir -p bin
cp ./server/dist-newstyle/build/${{ matrix.arch }}-${{ matrix.os }}/ghc-${{ matrix.compiler == 'ghc94' && '9.4.8' }}/ogmios-${{ steps.version.outputs.version }}/x/ogmios/build/ogmios/ogmios ./bin/ogmios
mkdir -p share && chmod +w share
mkdir -p share/zsh/site-functions
./bin/ogmios --zsh-completion-script ogmios > ./share/zsh/site-functions/_ogmios
mkdir -p share/bash-completion/completions
./bin/ogmios --bash-completion-script ogmios > ./share/bash-completion/completions/ogmios
chmod -w share
- name: 🔬 Version Sanity Check
if: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags') }}
id: version-check
shell: bash
run: |
OUTPUT=$(./bin/ogmios --version)
if [[ $CABAL == "0" ]]; then
VERSION="nightly"
else
VERSION="v$CABAL"
fi
if [[ $GITHUB_REF == "refs/tags"* ]]; then
TAG=$(echo ${GITHUB_REF/refs\/tags\/} | sed "s/^.*\(v[0-9].[0-9].[0-9]\).*$/\1/")
else
TAG="nightly"
fi
echo "git: $TAG <-- ${GITHUB_REF/refs\/tags\/}"
echo "cabal: $VERSION <-- $CABAL"
echo "bin: $OUTPUT"
echo ""
if [[ $OUTPUT == $TAG* ]] && [[ $OUTPUT == $VERSION* ]]; then
echo "tag=$TAG" >> $GITHUB_OUTPUT
echo "Ok."
exit 0
else
echo "x inconsistent versions"
exit 1
fi
env:
CABAL: ${{ steps.version.outputs.version }}
- name: 📎 Upload Artifact
uses: actions/upload-artifact@v3
with:
name: ogmios-${{ github.sha }}-${{ matrix.arch }}-${{ matrix.os }}
path: |
bin
share
# █████████ █████ ███ █████
# ███░░░░░███ ░░███ ░░░ ░░███
# ░███ ░░░ ██████ ████████ █████ █████ ██████ ████████ ░███ ████ ████████ ███████
# ░░█████████ ███░░███░░███░░███░░███ ░░███ ███░░███░░███░░███ ░███ ░░███ ░░███░░███ ░░░███░
# ░░░░░░░░███░███████ ░███ ░░░ ░███ ░███ ░███████ ░███ ░░░ ░███ ░███ ░███ ░███ ░███
# ███ ░███░███░░░ ░███ ░░███ ███ ░███░░░ ░███ ░███ █ ░███ ░███ ░███ ░███ ███
# ░░█████████ ░░██████ █████ ░░█████ ░░██████ █████ ███████████ █████ ████ █████ ░░█████
# ░░░░░░░░░ ░░░░░░ ░░░░░ ░░░░░ ░░░░░░ ░░░░░ ░░░░░░░░░░░ ░░░░░ ░░░░ ░░░░░ ░░░░░
server_lint:
strategy:
matrix:
os: [ ubuntu-22.04 ]
runs-on: ${{ matrix.os }}
steps:
- name: 📥 Checkout repository
uses: actions/[email protected]
with:
submodules: true
- name: 🔬 hlint
working-directory: server
shell: bash
env:
PACKAGE: hlint
REPOSITORY: ndmitchell/hlint
PLATFORM: x86_64-linux
RELEASE: v3.6.1
VERSION: 3.6.1
run: |
curl -sSL https://raw.github.com/cardanosolutions/ogmios/master/scripts/exec-from-github.sh | sh -s src test app -h .hlint.yaml
- name: 🧐 stylish-haskell
working-directory: server
shell: bash
env:
PACKAGE: stylish-haskell
REPOSITORY: jaspervdj/stylish-haskell
PLATFORM: linux-x86_64
RELEASE: v0.14.5.0
VERSION: v0.14.5.0
run: |
curl -sSL https://raw.github.com/cardanosolutions/ogmios/master/scripts/exec-from-github.sh | sh -s $(find src test app -type f -name '*.hs' ! -path '*.stack-work*') -i -c .stylish-haskell.yaml
if [ -z "$(git status --porcelain)" ]; then
echo "No style errors detected."
else
echo "Style errors detected:"
git diff
exit 1
fi
#
# ███████████ █████████ ███ █████ █████████ ████ ███ █████
# ░█░░░███░░░█ ███░░░░░███ ░░░ ░░███ ███░░░░░███░░███ ░░░ ░░███
# ░ ░███ ░ █████ ████ ████████ ██████ ░███ ░░░ ██████ ████████ ████ ████████ ███████ ███ ░░░ ░███ ████ ██████ ████████ ███████
# ░███ ░░███ ░███ ░░███░░███ ███░░███░░█████████ ███░░███░░███░░███░░███ ░░███░░███░░░███░ ░███ ░███ ░░███ ███░░███░░███░░███ ░░░███░
# ░███ ░███ ░███ ░███ ░███░███████ ░░░░░░░░███░███ ░░░ ░███ ░░░ ░███ ░███ ░███ ░███ ░███ ░███ ░███ ░███████ ░███ ░███ ░███
# ░███ ░███ ░███ ░███ ░███░███░░░ ███ ░███░███ ███ ░███ ░███ ░███ ░███ ░███ ███ ░░███ ███ ░███ ░███ ░███░░░ ░███ ░███ ░███ ███
# █████ ░░███████ ░███████ ░░██████ ░░█████████ ░░██████ █████ █████ ░███████ ░░█████ ░░█████████ █████ █████░░██████ ████ █████ ░░█████
# ░░░░░ ░░░░░███ ░███░░░ ░░░░░░ ░░░░░░░░░ ░░░░░░ ░░░░░ ░░░░░ ░███░░░ ░░░░░ ░░░░░░░░░ ░░░░░ ░░░░░ ░░░░░░ ░░░░ ░░░░░ ░░░░░
# ███ ░███ ░███ ░███
# ░░██████ █████ █████
# ░░░░░░ ░░░░░ ░░░░░
clients_TypeScript:
needs: [server_build]
strategy:
matrix:
os: [ linux ]
arch: [ x86_64 ]
network: [ preview ]
cardano-node: [ 10.1.3 ]
runs-on: ${{ matrix.os == 'linux' && 'ubuntu-22.04' }}
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v3
with:
submodules: true
- name: ⌚ Get Date/Time
id: date-time
shell: bash
run: |
echo "::set-output name=value::$(/bin/date -u "+%Y%m%d-%H%M%S")"
- name: 🧰 Setup Node.js
uses: actions/[email protected]
with:
node-version: lts/Gallium
- name: 🔨 Build
working-directory: clients/TypeScript
run: |
yarn install --frozen-lockfile --non-interactive --logevel=error
yarn build
yarn lint
- name: 📥 Download
uses: actions/download-artifact@v3
with:
name: ogmios-${{ github.sha }}-${{ matrix.arch }}-${{ matrix.os }}
path: server
- name: 💾 Cache cardano-node DB
id: cache
uses: actions/cache@v3
with:
path: ${{ runner.temp }}/db-${{ matrix.network }}
key: cardano-node-ogmios-${{ matrix.network }}-${{ steps.date-time.outputs.value }}
restore-keys: |
cardano-node-ogmios-${{ matrix.network }}-
- name: 🔬 Test
if: ${{ matrix.network == 'preview' }}
working-directory: clients/TypeScript
shell: bash
env:
CONFDIR: /home/runner/work/ogmios/ogmios/server/config/network/${{ matrix.network }}
run: |
chmod +x ../../server/bin/ogmios
sudo ../../server/bin/ogmios --port 1337 --log-level error --node-socket ${{ runner.temp }}/ipc/node.socket --node-config $CONFDIR/cardano-node/config.json &
docker pull ghcr.io/intersectmbo/cardano-node:${{ matrix.cardano-node }}
docker run -d --name cardano-node \
-v ${{ runner.temp }}/db-${{ matrix.network }}:/db \
-v ${{ runner.temp }}/ipc:/ipc \
-v $CONFDIR/cardano-node:/config \
-v $CONFDIR/genesis:/genesis \
ghcr.io/intersectmbo/cardano-node:${{ matrix.cardano-node }} run --config /config/config.json --database-path /db --socket-path /ipc/node.socket --topology /config/topology.json
../../scripts/wait-for-sync.sh 1337 1 "docker logs --since 10s cardano-node"
yarn test
docker stop cardano-node
docker rm cardano-node
#
# ███████████ █████████ ███ █████ ███████████ ██████████ ███████████ █████
# ░█░░░███░░░█ ███░░░░░███ ░░░ ░░███ ░░███░░░░░███ ░░███░░░░░█░░███░░░░░███░░███
# ░ ░███ ░ █████ ████ ████████ ██████ ░███ ░░░ ██████ ████████ ████ ████████ ███████ ░███ ░███ ░███ █ ░ ░███ ░███ ░███
# ░███ ░░███ ░███ ░░███░░███ ███░░███░░█████████ ███░░███░░███░░███░░███ ░░███░░███░░░███░ ░██████████ ░██████ ░██████████ ░███
# ░███ ░███ ░███ ░███ ░███░███████ ░░░░░░░░███░███ ░░░ ░███ ░░░ ░███ ░███ ░███ ░███ ░███░░░░░███ ░███░░█ ░███░░░░░░ ░███
# ░███ ░███ ░███ ░███ ░███░███░░░ ███ ░███░███ ███ ░███ ░███ ░███ ░███ ░███ ███ ░███ ░███ ░███ ░ █ ░███ ░███ █
# █████ ░░███████ ░███████ ░░██████ ░░█████████ ░░██████ █████ █████ ░███████ ░░█████ █████ █████ ██████████ █████ ███████████
# ░░░░░ ░░░░░███ ░███░░░ ░░░░░░ ░░░░░░░░░ ░░░░░░ ░░░░░ ░░░░░ ░███░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░░░░░░ ░░░░░ ░░░░░░░░░░░
# ███ ░███ ░███ ░███
# ░░██████ █████ █████
# ░░░░░░ ░░░░░ ░░░░░
clients_TypeScript_repl:
if: ${{ github.event_name == 'push' }}
runs-on: ${{ matrix.os }}
needs: [clients_TypeScript]
strategy:
matrix:
os: [ ubuntu-22.04 ]
target: [linux,macos,win.exe]
steps:
- name: 📥 Checkout repository
uses: actions/[email protected]
- name: 🧰 Setup Node.js
uses: actions/[email protected]
with:
node-version: lts/Gallium
- name: 📦 Package REPL
working-directory: clients/TypeScript
run: |
yarn install --frozen-lockfile --non-interactive --logevel=error
yarn repl:pkg
- name: 📎 Upload REPL exe
uses: actions/[email protected]
with:
name: cardano-ogmios-repl-${{ matrix.target }}-${{ github.sha }}
path: clients/TypeScript/packages/repl/build/cardano-ogmios-repl-${{ matrix.target }}
# ███████████ █████████ ███ █████ ██████ █████ ███████████ ██████ ██████
# ░█░░░███░░░█ ███░░░░░███ ░░░ ░░███ ░░██████ ░░███ ░░███░░░░░███░░██████ ██████
# ░ ░███ ░ █████ ████ ████████ ██████ ░███ ░░░ ██████ ████████ ████ ████████ ███████ ░███░███ ░███ ░███ ░███ ░███░█████░███
# ░███ ░░███ ░███ ░░███░░███ ███░░███░░█████████ ███░░███░░███░░███░░███ ░░███░░███░░░███░ ░███░░███░███ ░██████████ ░███░░███ ░███
# ░███ ░███ ░███ ░███ ░███░███████ ░░░░░░░░███░███ ░░░ ░███ ░░░ ░███ ░███ ░███ ░███ ░███ ░░██████ ░███░░░░░░ ░███ ░░░ ░███
# ░███ ░███ ░███ ░███ ░███░███░░░ ███ ░███░███ ███ ░███ ░███ ░███ ░███ ░███ ███ ░███ ░░█████ ░███ ░███ ░███
# █████ ░░███████ ░███████ ░░██████ ░░█████████ ░░██████ █████ █████ ░███████ ░░█████ █████ ░░█████ █████ █████ █████
# ░░░░░ ░░░░░███ ░███░░░ ░░░░░░ ░░░░░░░░░ ░░░░░░ ░░░░░ ░░░░░ ░███░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░
# ███ ░███ ░███ ░███
# ░░██████ █████ █████
# ░░░░░░ ░░░░░ ░░░░░
clients_TypeScript_npm:
if: ${{ github.event_name == 'push' }}
runs-on: ${{ matrix.os }}
needs: [clients_TypeScript]
strategy:
matrix:
os: [ ubuntu-22.04 ]
package: [ schema, client, repl ]
steps:
- name: 📥 Checkout repository
uses: actions/[email protected]
- name: 🧰 Setup Node.js
uses: actions/[email protected]
with:
node-version: lts/Gallium
- name: 📦 Pack
working-directory: clients/TypeScript
run: |
yarn install --frozen-lockfile --non-interactive --logevel=error
./scripts/pack.sh
- name: 📎 Upload npm packages
uses: actions/[email protected]
with:
name: cardano-ogmios-clients-ts-packages
path: |
clients/TypeScript/cardano-ogmios-client-${{ github.sha }}.tgz
clients/TypeScript/cardano-ogmios-schema-${{ github.sha }}.tgz
clients/TypeScript/cardano-ogmios-repl-${{ github.sha }}.tgz
- name: 📤 Publish client package to npm registry
if: ${{ startsWith(github.ref, 'refs/tags') }}
uses: JS-DevTools/npm-publish@v2
with:
package: clients/TypeScript/packages/${{ matrix.package }}/package.json
strategy: upgrade
token: ${{ secrets.NPM_TOKEN }}
# ██████████ ███████ █████████ █████ ████ ██████████ ███████████
# ░░███░░░░███ ███░░░░░███ ███░░░░░███░░███ ███░ ░░███░░░░░█░░███░░░░░███
# ░███ ░░███ ███ ░░███ ███ ░░░ ░███ ███ ░███ █ ░ ░███ ░███
# ░███ ░███░███ ░███░███ ░███████ ░██████ ░██████████
# ░███ ░███░███ ░███░███ ░███░░███ ░███░░█ ░███░░░░░███
# ░███ ███ ░░███ ███ ░░███ ███ ░███ ░░███ ░███ ░ █ ░███ ░███
# ██████████ ░░░███████░ ░░█████████ █████ ░░████ ██████████ █████ █████
# ░░░░░░░░░░ ░░░░░░░ ░░░░░░░░░ ░░░░░ ░░░░ ░░░░░░░░░░ ░░░░░ ░░░░░
docker_combined:
needs: [ server_build ]
runs-on: ${{ matrix.os == 'linux' && 'ubuntu-22.04' }}
strategy:
matrix:
os: [ linux ]
target: [ cardano-node-ogmios ]
network: [ mainnet, preprod, preview, sanchonet ]
cardano-node: [ 10.1.3 ]
cardano-node-latest: [ 10.1.3 ]
arch: [ x86_64 ]
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v3
with:
submodules: true
- name: 🧰 Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: 🧐 hadolint
uses: brpaz/[email protected]
with:
dockerfile: "./Dockerfile"
failure-threshold: warning
ignore: DL3029 DL3059
- name: 🐳 Login to DockerHub
if: ${{ github.event_name == 'push' }}
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
- name: 📝 Base Variables
id: base-variables
run: |
echo "image=cardanosolutions/${{ matrix.target }}" >> $GITHUB_OUTPUT
- name: 📝 Tag Variables
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') }}
id: tag-variables
run: |
echo "tag=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT
- name: 📥 Download
uses: actions/download-artifact@v3
with:
name: ogmios-${{ github.sha }}-${{ matrix.arch }}-${{ matrix.os }}
path: server
- name: "📸 :latest"
id: build
if: ${{ github.event_name == 'push' && matrix.network == 'mainnet' && github.ref == 'refs/heads/master' }}
uses: docker/build-push-action@v4
with:
build-args: |
NETWORK=${{ matrix.network }}
CARDANO_NODE_IMAGE=ghcr.io/intersectmbo/cardano-node:${{ matrix.cardano-node-latest }}
context: .
push: true
tags: ${{ steps.base-variables.outputs.image }}:latest
target: ${{ matrix.target }}
platforms: ${{ matrix.os }}/${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}
cache-from: type=registry,ref=${{ steps.base-variables.outputs.image }}:latest
cache-to: type=inline
- name: "📸 :latest-${{ matrix.network }}"
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
uses: docker/build-push-action@v4
with:
build-args: |
NETWORK=${{ matrix.network }}
CARDANO_NODE_IMAGE=ghcr.io/intersectmbo/cardano-node:${{ matrix.cardano-node-latest }}
context: .
push: true
tags: ${{ steps.base-variables.outputs.image }}:latest-${{ matrix.network }}
target: ${{ matrix.target }}
platforms: ${{ matrix.os }}/${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}
cache-from: type=registry,ref=${{ steps.base-variables.outputs.image }}:latest-${{ matrix.network }}
cache-to: type=inline
- name: "🏷️ :v*.*.*"
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') && matrix.network == 'mainnet' }}
uses: docker/build-push-action@v4
with:
build-args: |
NETWORK=${{ matrix.network }}
CARDANO_NODE_IMAGE=ghcr.io/intersectmbo/cardano-node:${{ matrix.cardano-node }}
context: .
push: true
tags: ${{ steps.base-variables.outputs.image }}:${{ steps.tag-variables.outputs.tag }}_${{ matrix.cardano-node }}
target: ${{ matrix.target }}
platforms: ${{ matrix.os }}/${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}
cache-from: type=registry,ref=${{ steps.base-variables.outputs.image }}:latest
cache-to: type=inline
- name: "🏷️ :v*.*.*-${{ matrix.network }}"
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') }}
uses: docker/build-push-action@v4
with:
build-args: |
NETWORK=${{ matrix.network }}
CARDANO_NODE_IMAGE=ghcr.io/intersectmbo/cardano-node:${{ matrix.cardano-node }}
context: .
push: true
tags: ${{ steps.base-variables.outputs.image }}:${{ steps.tag-variables.outputs.tag }}_${{ matrix.cardano-node }}-${{ matrix.network }}
target: ${{ matrix.target }}
platforms: ${{ matrix.os }}/${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}
cache-from: type=registry,ref=${{ steps.base-variables.outputs.image }}:latest-${{ matrix.network }}
cache-to: type=inline
docker_standalone:
needs: [ server_build ]
runs-on: ${{ matrix.os == 'linux' && 'ubuntu-22.04' }}
strategy:
matrix:
os: [ linux ]
target: [ ogmios ]
arch: [ x86_64, aarch64 ]
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v3
with:
submodules: true
- name: 🧰 Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: 🧐 hadolint
uses: brpaz/[email protected]
with:
dockerfile: "./Dockerfile"
failure-threshold: warning
ignore: DL3029 DL3059
- name: 🐳 Login to DockerHub
if: ${{ github.event_name == 'push' }}
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
- name: 📝 Base Variables
id: base-variables
run: |
echo "image=cardanosolutions/${{ matrix.target }}" >> $GITHUB_OUTPUT
- name: 📝 Tag Variables
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') }}
id: tag-variables
run: |
echo "tag=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT
- name: 📝 Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ steps.base-variables.outputs.image }}
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=semver,pattern=v{{version}}
- name: 📥 Download
uses: actions/download-artifact@v3
with:
name: ogmios-${{ github.sha }}-${{ matrix.arch }}-${{ matrix.os }}
path: server
- name: 📸 Build image
id: build
if: ${{ github.event_name == 'push' }}
uses: docker/build-push-action@v4
with:
context: .
target: ${{ matrix.target }}
platforms: ${{ matrix.os }}/${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}
cache-from: type=registry,ref=${{ steps.base-variables.outputs.image }}:latest
cache-to: type=inline
outputs: type=image,name=${{ steps.base-variables.outputs.image }},push-by-digest=true,name-canonical=true,push=true
- name: 🔡 Export digest
if: ${{ github.event_name == 'push' }}
run: |
mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: 💾 Upload digest
if: ${{ github.event_name == 'push' }}
uses: actions/upload-artifact@v3
with:
name: digests
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
registry:
needs: [ docker_standalone ]
runs-on: ubuntu-22.04
strategy:
matrix:
target: [ ogmios ]
steps:
- name: 📥 Download digests
uses: actions/download-artifact@v3
with:
name: digests
path: /tmp/digests
- name: 🧰 Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: 📝 Base Variables
id: base-variables
run: |
echo "image=cardanosolutions/${{ matrix.target }}" >> $GITHUB_OUTPUT
- name: 📝 Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ steps.base-variables.outputs.image }}
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=semver,pattern=v{{version}}
- name: 🐳 Login to DockerHub
if: ${{ github.event_name == 'push' }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
- name: 📦 Create manifest list and push
if: ${{ github.event_name == 'push' }}
working-directory: /tmp/digests
run: |
docker buildx imagetools create \
$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ steps.base-variables.outputs.image }}@sha256:%s ' *)
- name: 🧐 Inspect image
if: ${{ github.event_name == 'push' }}
run: |
docker buildx imagetools inspect ${{ steps.base-variables.outputs.image }}:${{ steps.meta.outputs.version }}