mirror of
https://github.com/nushell/nushell
synced 2025-01-01 07:48:53 +00:00
3653400ebc
there is currently a bug with invalid syntax for some of the docker build steps, and I think this is because there are build variables in the matrix that are not defined. This PR will attempt to resolve this issue by defining all missing variables for each row in the matrix. Signed-off-by: vsoch <vsochat@stanford.edu>
118 lines
4.9 KiB
YAML
118 lines
4.9 KiB
YAML
name: Publish consumable Docker images
|
|
|
|
on:
|
|
push:
|
|
tags: ['v?[0-9]+.[0-9]+.[0-9]+*']
|
|
|
|
jobs:
|
|
compile:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
arch:
|
|
- x86_64-unknown-linux-musl
|
|
- x86_64-unknown-linux-gnu
|
|
steps:
|
|
- uses: actions/checkout@v1
|
|
- name: Install rust-embedded/cross
|
|
env: { VERSION: v0.1.16 }
|
|
run: >-
|
|
wget -nv https://github.com/rust-embedded/cross/releases/download/${VERSION}/cross-${VERSION}-x86_64-unknown-linux-gnu.tar.gz
|
|
-O- | sudo tar xz -C /usr/local/bin/
|
|
- name: compile for specific target
|
|
env: { arch: '${{ matrix.arch }}' }
|
|
run: |
|
|
cross build --target ${{ matrix.arch }} --release
|
|
# leave only the executable file
|
|
rm -rd target/${{ matrix.arch }}/release/{*/*,*.d,*.rlib,.fingerprint}
|
|
find . -empty -delete
|
|
- uses: actions/upload-artifact@master
|
|
with:
|
|
name: ${{ matrix.arch }}
|
|
path: target/${{ matrix.arch }}/release
|
|
|
|
docker:
|
|
name: Build and publish docker images
|
|
needs: compile
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
DOCKER_REGISTRY: quay.io/nushell
|
|
DOCKER_PASSWORD: ${{ secrets.DOCKER_REGISTRY }}
|
|
DOCKER_USER: ${{ secrets.DOCKER_USER }}
|
|
strategy:
|
|
matrix:
|
|
tag:
|
|
- alpine
|
|
- slim
|
|
- debian
|
|
- glibc-busybox
|
|
- musl-busybox
|
|
- musl-distroless
|
|
- glibc-distroless
|
|
- glibc
|
|
- musl
|
|
include:
|
|
- { tag: alpine, base-image: alpine, arch: x86_64-unknown-linux-musl, plugin: true, use-patch: false}
|
|
- { tag: slim, base-image: 'debian:stable-slim', arch: x86_64-unknown-linux-gnu, plugin: true, use-patch: false}
|
|
- { tag: debian, base-image: debian, arch: x86_64-unknown-linux-gnu, plugin: true, use-patch: false}
|
|
- { tag: glibc-busybox, base-image: 'busybox:glibc', arch: x86_64-unknown-linux-gnu, plugin: false, use-patch: true }
|
|
- { tag: musl-busybox, base-image: 'busybox:musl', arch: x86_64-unknown-linux-musl, plugin: false, use-patch: false}
|
|
- { tag: musl-distroless, base-image: 'gcr.io/distroless/static', arch: x86_64-unknown-linux-musl, plugin: false, use-patch: false}
|
|
- { tag: glibc-distroless, base-image: 'gcr.io/distroless/cc', arch: x86_64-unknown-linux-gnu, plugin: false, use-patch: true }
|
|
- { tag: glibc, base-image: scratch, arch: x86_64-unknown-linux-gnu, plugin: false, use-patch: false}
|
|
- { tag: musl, base-image: scratch, arch: x86_64-unknown-linux-musl, plugin: false, use-patch: false}
|
|
steps:
|
|
- uses: actions/checkout@v1
|
|
- uses: actions/download-artifact@master
|
|
with: { name: '${{ matrix.arch }}', path: target/release }
|
|
- name: Build and publish exact version
|
|
run: |-
|
|
export DOCKER_TAG=${GITHUB_REF##*/}-${{ matrix.tag }}
|
|
export NU_BINS=target/release/$( [ ${{ matrix.plugin }} = true ] && echo nu* || echo nu )
|
|
export PATCH=$([ ${{ matrix.use-patch }} = true ] && echo .${{ matrix.tag }} || echo '')
|
|
chmod +x $NU_BINS
|
|
|
|
echo ${DOCKER_PASSWORD} | docker login ${DOCKER_REGISTRY} -u ${DOCKER_USER} --password-stdin
|
|
docker-compose --file docker/docker-compose.package.yml build
|
|
docker-compose --file docker/docker-compose.package.yml push # exact version
|
|
env:
|
|
BASE_IMAGE: ${{ matrix.base-image }}
|
|
|
|
#region semantics tagging
|
|
- name: Retag and push with suffixed version
|
|
run: |-
|
|
VERSION=${GITHUB_REF##*/}
|
|
|
|
latest_version=${VERSION%%%.*}-${{ matrix.tag }}
|
|
latest_feature=${VERSION%%.*}-${{ matrix.tag }}
|
|
latest_patch=${VERSION%.*}-${{ matrix.tag }}
|
|
exact_version=${VERSION}-${{ matrix.tag }}
|
|
|
|
tags=( ${latest_version} ${latest_feature} ${latest_patch} ${exact_version} )
|
|
|
|
for tag in ${tags[@]}; do
|
|
docker tag ${DOCKER_REGISTRY}/nu:${VERSION}-${{ matrix.tag }} ${DOCKER_REGISTRY}/nu:${tag}
|
|
docker push ${DOCKER_REGISTRY}/nu:${tag}
|
|
done
|
|
|
|
# latest version
|
|
docker tag ${DOCKER_REGISTRY}/nu:${VERSION}-${{ matrix.tag }} ${DOCKER_REGISTRY}/nu:${{ matrix.tag }}
|
|
docker push ${DOCKER_REGISTRY}/nu:${{ matrix.tag }}
|
|
|
|
- name: Retag and push debian as latest
|
|
if: matrix.tag == 'debian'
|
|
run: |-
|
|
VERSION=${GITHUB_REF##*/}
|
|
|
|
# ${latest features} ${latest patch} ${exact version}
|
|
tags=( ${VERSION%%.*} ${VERSION%.*} ${VERSION} )
|
|
|
|
for tag in ${tags[@]}; do
|
|
docker tag ${DOCKER_REGISTRY}/nu:${VERSION}-${{ matrix.tag }} ${DOCKER_REGISTRY}/nu:${tag}
|
|
docker push ${DOCKER_REGISTRY}/nu:${tag}
|
|
done
|
|
|
|
# latest version
|
|
docker tag ${DOCKER_REGISTRY}/nu:${{ matrix.tag }} ${DOCKER_REGISTRY}/nu:latest
|
|
docker push ${DOCKER_REGISTRY}/nu:latest
|
|
#endregion semantics tagging
|