mirror of
http://github.com/valkey-io/valkey
synced 2024-11-23 11:51:01 +00:00
[related to](https://github.com/valkey-io/valkey/issues/230) Adds workflows to build Valkey binaries and push to S3 to make it available to download from the website The Workflows can be triggered by pushing a release to the repo and the other option is manually by one of the Maintainers. Once the workflow triggers, it will generate a matrix of Jobs for the platforms we need to build from `utils/releasetools/build-config.json` and then the respective Jobs are triggered. These jobs make Valkey with respect to the platform binaries we want to release and would push to a private S3 bucket. --------- Signed-off-by: Roshan Khatri <rvkhatri@amazon.com>
This commit is contained in:
parent
68d887636e
commit
50eefd647d
44
.github/actions/generate-package-build-matrix/action.yml
vendored
Normal file
44
.github/actions/generate-package-build-matrix/action.yml
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
name: Generate target matrix.
|
||||
description: Matrix creation for building Valkey for different architectures and platforms.
|
||||
|
||||
inputs:
|
||||
ref:
|
||||
description: The commit, tag or branch of Valkey to checkout to determine what version to use.
|
||||
required: true
|
||||
outputs:
|
||||
x86_64-build-matrix:
|
||||
description: The x86_64 build matrix.
|
||||
value: ${{ steps.set-matrix.outputs.x86matrix }}
|
||||
arm64-build-matrix:
|
||||
description: The arm64 build matrix.
|
||||
value: ${{ steps.set-matrix.outputs.armmatrix }}
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Checkout code for version check
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.ref }}
|
||||
path: version-check
|
||||
|
||||
- name: Get targets
|
||||
run: |
|
||||
x86_arch=$(jq -c '[.linux_targets[] | select(.arch=="x86_64")]' utils/releasetools/build-config.json)
|
||||
x86_matrix=$(echo "{ \"distro\" : $x86_arch }" | jq -c .)
|
||||
echo "X86_MATRIX=$x86_matrix" >> $GITHUB_ENV
|
||||
|
||||
arm_arch=$(jq -c '[.linux_targets[] | select(.arch=="arm64")]' utils/releasetools/build-config.json)
|
||||
arm_matrix=$(echo "{ \"distro\" : $arm_arch }" | jq -c .)
|
||||
echo "ARM_MATRIX=$arm_matrix" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- id: set-matrix
|
||||
run: |
|
||||
echo $X86_MATRIX
|
||||
echo $X86_MATRIX| jq .
|
||||
echo "x86matrix=$X86_MATRIX" >> $GITHUB_OUTPUT
|
||||
echo $ARM_MATRIX
|
||||
echo $ARM_MATRIX| jq .
|
||||
echo "armmatrix=$ARM_MATRIX" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
89
.github/workflows/build-release-packages.yml
vendored
Normal file
89
.github/workflows/build-release-packages.yml
vendored
Normal file
@ -0,0 +1,89 @@
|
||||
name: Build Release Packages
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: Version of Valkey to build
|
||||
required: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
# This job provides the version metadata from the tag for the other jobs to use.
|
||||
release-build-get-meta:
|
||||
name: Get metadata to build
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
version: ${{ steps.get_version.outputs.VERSION }}
|
||||
steps:
|
||||
|
||||
- run: |
|
||||
echo "Version: ${{ inputs.version || github.ref_name }}"
|
||||
shell: bash
|
||||
|
||||
# This step is to consolidate the three different triggers into a single "version"
|
||||
# 1. If manual dispatch - use the version provided.
|
||||
# 3. If tag trigger, use that tag.
|
||||
- name: Get the version
|
||||
id: get_version
|
||||
run: |
|
||||
VERSION="${INPUT_VERSION}"
|
||||
if [ -z "${VERSION}" ]; then
|
||||
exit 1
|
||||
fi
|
||||
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
env:
|
||||
# Use the dispatch variable in preference, if empty use the context ref_name which should
|
||||
# only ever be a tag
|
||||
INPUT_VERSION: ${{ inputs.version || github.ref_name }}
|
||||
|
||||
generate-build-matrix:
|
||||
name: Generating build matrix
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
x86_64-build-matrix: ${{ steps.set-matrix.outputs.x86_64-build-matrix }}
|
||||
arm64-build-matrix: ${{ steps.set-matrix.outputs.arm64-build-matrix }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
# Set up the list of target to build so we can pass the JSON to the reusable job
|
||||
- uses: ./.github/actions/generate-package-build-matrix
|
||||
id: set-matrix
|
||||
with:
|
||||
ref: ${{ inputs.version || github.ref_name }}
|
||||
|
||||
release-build-linux-x86-packages:
|
||||
needs:
|
||||
- release-build-get-meta
|
||||
- generate-build-matrix
|
||||
uses: ./.github/workflows/call-build-linux-x86-packages.yml
|
||||
with:
|
||||
version: ${{ needs.release-build-get-meta.outputs.version }}
|
||||
ref: ${{ inputs.version || github.ref_name }}
|
||||
build_matrix: ${{ needs.generate-build-matrix.outputs.x86_64-build-matrix }}
|
||||
secrets:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
bucket: ${{ secrets.AWS_S3_BUCKET }}
|
||||
access_key_id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }}
|
||||
secret_access_key: ${{ secrets.AWS_S3_ACCESS_KEY }}
|
||||
|
||||
release-build-linux-arm-packages:
|
||||
needs:
|
||||
- release-build-get-meta
|
||||
- generate-build-matrix
|
||||
uses: ./.github/workflows/call-build-linux-arm-packages.yml
|
||||
with:
|
||||
version: ${{ needs.release-build-get-meta.outputs.version }}
|
||||
ref: ${{ inputs.version || github.ref_name }}
|
||||
build_matrix: ${{ needs.generate-build-matrix.outputs.arm64-build-matrix }}
|
||||
secrets:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
bucket: ${{ secrets.AWS_S3_BUCKET }}
|
||||
access_key_id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }}
|
||||
secret_access_key: ${{ secrets.AWS_S3_ACCESS_KEY }}
|
79
.github/workflows/call-build-linux-arm-packages.yml
vendored
Normal file
79
.github/workflows/call-build-linux-arm-packages.yml
vendored
Normal file
@ -0,0 +1,79 @@
|
||||
name: Builds Linux arm binary packages into S3 bucket.
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
version:
|
||||
description: The version of Valkey to create.
|
||||
type: string
|
||||
required: true
|
||||
ref:
|
||||
description: The commit, tag or branch of Valkey to checkout for building that creates the version above.
|
||||
type: string
|
||||
required: true
|
||||
build_matrix:
|
||||
description: The build targets to produce as a JSON matrix.
|
||||
type: string
|
||||
required: true
|
||||
secrets:
|
||||
token:
|
||||
description: The Github token or similar to authenticate with.
|
||||
required: true
|
||||
bucket:
|
||||
description: The name of the S3 bucket to push packages into.
|
||||
required: false
|
||||
access_key_id:
|
||||
description: The S3 access key id for the bucket.
|
||||
required: false
|
||||
secret_access_key:
|
||||
description: The S3 secret access key for the bucket.
|
||||
required: false
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build-valkey:
|
||||
# Capture source tarball and generate checksum for it
|
||||
name: Build package ${{ matrix.distro.target }} ${{ matrix.distro.arch }}
|
||||
runs-on: 'ubuntu-latest'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix: ${{ fromJSON(inputs.build_matrix) }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.version }}
|
||||
|
||||
- name: Make Valkey
|
||||
uses: uraimo/run-on-arch-action@v2
|
||||
with:
|
||||
arch: aarch64
|
||||
distro: ${{matrix.distro.target}}
|
||||
install: apt-get update && apt-get install -y build-essential libssl-dev
|
||||
run: make -C src all BUILD_TLS=yes
|
||||
|
||||
- name: Create Tarball and SHA256sums
|
||||
run: |
|
||||
TAR_FILE_NAME=valkey-${{inputs.version}}-${{matrix.distro.platform}}-${{ matrix.distro.arch}}
|
||||
mkdir -p $TAR_FILE_NAME/bin $TAR_FILE_NAME/share
|
||||
cp -rfv src/valkey-* $TAR_FILE_NAME/bin
|
||||
cp -v /home/runner/work/valkey/valkey/COPYING $TAR_FILE_NAME/share/LICENSE
|
||||
tar -czvf $TAR_FILE_NAME.tar.gz $TAR_FILE_NAME
|
||||
sha256sum $TAR_FILE_NAME.tar.gz > $TAR_FILE_NAME.tar.gz.sha256
|
||||
mkdir -p packages-files
|
||||
cp -rfv $TAR_FILE_NAME.tar* packages-files/
|
||||
|
||||
- name: Install AWS cli.
|
||||
run: |
|
||||
sudo apt-get install -y awscli
|
||||
|
||||
- name: Configure AWS credentials
|
||||
run: |
|
||||
aws configure set region us-west-2
|
||||
aws configure set aws_access_key_id ${{ secrets.access_key_id }}
|
||||
aws configure set aws_secret_access_key ${{ secrets.secret_access_key }}
|
||||
|
||||
- name: Sync to S3
|
||||
run: aws s3 sync packages-files s3://${{secrets.bucket}}/releases/
|
73
.github/workflows/call-build-linux-x86-packages.yml
vendored
Normal file
73
.github/workflows/call-build-linux-x86-packages.yml
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
name: Builds Linux X86 binary packages into S3 bucket.
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
version:
|
||||
description: The version of Valkey to create.
|
||||
type: string
|
||||
required: true
|
||||
ref:
|
||||
description: The commit, tag or branch of Valkey to checkout for building that creates the version above.
|
||||
type: string
|
||||
required: true
|
||||
build_matrix:
|
||||
description: The build targets to produce as a JSON matrix.
|
||||
type: string
|
||||
required: true
|
||||
secrets:
|
||||
token:
|
||||
description: The Github token or similar to authenticate with.
|
||||
required: true
|
||||
bucket:
|
||||
description: The name of the S3 bucket to push packages into.
|
||||
required: false
|
||||
access_key_id:
|
||||
description: The S3 access key id for the bucket.
|
||||
required: false
|
||||
secret_access_key:
|
||||
description: The S3 secret access key for the bucket.
|
||||
required: false
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build-valkey:
|
||||
# Capture source tarball and generate checksum for it
|
||||
name: Build package ${{ matrix.distro.target }} ${{ matrix.distro.arch }}
|
||||
runs-on: 'ubuntu-latest'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix: ${{ fromJSON(inputs.build_matrix) }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.version }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: sudo apt-get update && sudo apt-get install -y build-essential libssl-dev jq wget awscli
|
||||
|
||||
- name: Make Valkey
|
||||
run: make -C src all BUILD_TLS=yes
|
||||
|
||||
- name: Create Tarball and SHA256sums
|
||||
run: |
|
||||
TAR_FILE_NAME=valkey-${{inputs.version}}-${{matrix.distro.platform}}-${{ matrix.distro.arch}}
|
||||
mkdir -p $TAR_FILE_NAME/bin $TAR_FILE_NAME/share
|
||||
cp -rfv src/valkey-* $TAR_FILE_NAME/bin
|
||||
cp -v /home/runner/work/valkey/valkey/COPYING $TAR_FILE_NAME/share/LICENSE
|
||||
tar -czvf $TAR_FILE_NAME.tar.gz $TAR_FILE_NAME
|
||||
sha256sum $TAR_FILE_NAME.tar.gz > $TAR_FILE_NAME.tar.gz.sha256
|
||||
mkdir -p packages-files
|
||||
cp -rfv $TAR_FILE_NAME.tar* packages-files/
|
||||
|
||||
- name: Configure AWS credentials
|
||||
run: |
|
||||
aws configure set region us-west-2
|
||||
aws configure set aws_access_key_id ${{ secrets.access_key_id }}
|
||||
aws configure set aws_secret_access_key ${{ secrets.secret_access_key }}
|
||||
|
||||
- name: Sync to S3
|
||||
run: aws s3 sync packages-files s3://${{secrets.bucket}}/releases/
|
28
utils/releasetools/build-config.json
Normal file
28
utils/releasetools/build-config.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"linux_targets": [
|
||||
{
|
||||
"arch": "x86_64",
|
||||
"target": "ubuntu18.04",
|
||||
"type": "deb",
|
||||
"platform": "bionic"
|
||||
},
|
||||
{
|
||||
"arch": "x86_64",
|
||||
"target": "ubuntu20.04",
|
||||
"type": "deb",
|
||||
"platform": "focal"
|
||||
},
|
||||
{
|
||||
"arch": "arm64",
|
||||
"target": "ubuntu18.04",
|
||||
"type": "deb",
|
||||
"platform": "bionic"
|
||||
},
|
||||
{
|
||||
"arch": "arm64",
|
||||
"target": "ubuntu20.04",
|
||||
"type": "deb",
|
||||
"platform": "focal"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user