summaryrefslogtreecommitdiffstats
path: root/src/fluent-bit/.github/workflows/call-build-linux-packages.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'src/fluent-bit/.github/workflows/call-build-linux-packages.yaml')
-rw-r--r--src/fluent-bit/.github/workflows/call-build-linux-packages.yaml263
1 files changed, 263 insertions, 0 deletions
diff --git a/src/fluent-bit/.github/workflows/call-build-linux-packages.yaml b/src/fluent-bit/.github/workflows/call-build-linux-packages.yaml
new file mode 100644
index 000000000..b8000225a
--- /dev/null
+++ b/src/fluent-bit/.github/workflows/call-build-linux-packages.yaml
@@ -0,0 +1,263 @@
+---
+name: Reusable workflow to build binary packages into S3 bucket
+
+on:
+ workflow_call:
+ inputs:
+ version:
+ description: The version of Fluent Bit to create.
+ type: string
+ required: true
+ ref:
+ description: The commit, tag or branch of Fluent Bit 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
+ environment:
+ description: The Github environment to run this workflow on.
+ type: string
+ required: false
+ unstable:
+ description: Optionally add metadata to build to indicate an unstable build, set to the contents you want to add.
+ type: string
+ required: false
+ default: ""
+ ignore_failing_targets:
+ description: Optionally ignore any failing builds in the matrix and continue.
+ type: boolean
+ required: false
+ default: false
+ secrets:
+ token:
+ description: The Github token or similar to authenticate with.
+ required: true
+ bucket:
+ description: The name of the S3 (US-East) 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
+ gpg_private_key:
+ description: The GPG key to use for signing the packages.
+ required: false
+ gpg_private_key_passphrase:
+ description: The GPG key passphrase to use for signing the packages.
+ required: false
+
+jobs:
+ call-build-capture-source:
+ # Capture source tarball and generate checksum for it
+ name: Extract any supporting metadata
+ runs-on: ubuntu-latest
+ environment: ${{ inputs.environment }}
+ permissions:
+ contents: read
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.ref }}
+ path: source
+
+ - name: Create tarball and checksums
+ run: |
+ tar -czvf $SOURCE_FILENAME_PREFIX.tar.gz -C source --exclude-vcs .
+ md5sum $SOURCE_FILENAME_PREFIX.tar.gz > $SOURCE_FILENAME_PREFIX.tar.gz.md5
+ sha256sum $SOURCE_FILENAME_PREFIX.tar.gz > $SOURCE_FILENAME_PREFIX.tar.gz.sha256
+ # Move to a directory to simplify upload/sync
+ mkdir -p source-packages
+ cp -fv $SOURCE_FILENAME_PREFIX* source-packages/
+ shell: bash
+ env:
+ SOURCE_FILENAME_PREFIX: source-${{ inputs.version }}
+
+ - name: Upload the source artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: source-${{ inputs.version }}
+ path: source-packages/*
+ if-no-files-found: error
+
+ # Pick up latest master version
+ - name: Checkout code for action
+ if: inputs.environment == 'staging'
+ uses: actions/checkout@v4
+ with:
+ path: action-support
+
+ - name: Push tarballs to S3
+ # Only upload for staging
+ if: inputs.environment == 'staging'
+ uses: ./action-support/.github/actions/sync-to-bucket
+ with:
+ bucket: ${{ secrets.bucket }}
+ access_key_id: ${{ secrets.access_key_id }}
+ secret_access_key: ${{ secrets.secret_access_key }}
+ bucket-directory: "${{ inputs.version }}/source"
+ source-directory: "source-packages/"
+
+ call-build-linux-packages:
+ name: ${{ matrix.distro }} package build and stage to S3
+ environment: ${{ inputs.environment }}
+ # Ensure for OSS Fluent Bit repo we enable usage of Actuated runners for ARM builds, for forks it should keep existing ubuntu-latest usage.
+ runs-on: ${{ (contains(matrix.distro, 'arm' ) && (github.repository == 'fluent/fluent-bit') && 'actuated-aarch64') || 'ubuntu-latest' }}
+ permissions:
+ contents: read
+ strategy:
+ fail-fast: false
+ matrix: ${{ fromJSON(inputs.build_matrix) }}
+ # Potentially we support continuing with all successful targets
+ continue-on-error: ${{ inputs.ignore_failing_targets || false }}
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.ref }}
+
+ - name: Set up Actuated mirror
+ if: contains(matrix.distro, 'arm' ) && (github.repository == 'fluent/fluent-bit')
+ uses: self-actuated/hub-mirror@master
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Replace all special characters with dashes
+ id: formatted_distro
+ run:
+ output=${INPUT//[\/]/-}
+ echo "$INPUT --> $output"
+ echo "replaced=$output" >> "$GITHUB_OUTPUT"
+ shell: bash
+ env:
+ INPUT: ${{ matrix.distro }}
+
+ - name: fluent-bit - ${{ matrix.distro }} artifacts
+ run: |
+ ./build.sh
+ env:
+ FLB_DISTRO: ${{ matrix.distro }}
+ FLB_OUT_DIR: ${{ inputs.version }}/staging
+ FLB_NIGHTLY_BUILD: ${{ inputs.unstable }}
+ CMAKE_INSTALL_PREFIX: /opt/fluent-bit/
+ working-directory: packaging
+
+ - name: Upload the ${{ steps.formatted_distro.outputs.replaced }} artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: packages-${{ inputs.version }}-${{ steps.formatted_distro.outputs.replaced }}
+ path: packaging/packages/
+ if-no-files-found: error
+
+ - name: Retrieve target info for repo creation
+ id: get-target-info
+ # Remove any .arm648 suffix
+ # For ubuntu map to codename using the disto-info list (CSV)
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y distro-info awscli
+ TARGET=${DISTRO%*.arm64v8}
+ if [[ "$TARGET" == "ubuntu/"* ]]; then
+ UBUNTU_CODENAME=$(cut -d ',' -f 1,3 < "/usr/share/distro-info/ubuntu.csv"|grep "${TARGET##*/}"|cut -d ',' -f 2)
+ if [[ -n "$UBUNTU_CODENAME" ]]; then
+ TARGET="ubuntu/$UBUNTU_CODENAME"
+ else
+ echo "Unable to extract codename for $DISTRO"
+ exit 1
+ fi
+ fi
+ echo "$TARGET"
+ echo "target=$TARGET" >> $GITHUB_OUTPUT
+ env:
+ DISTRO: ${{ matrix.distro }}
+ shell: bash
+
+ - name: Verify output target
+ # Only upload for staging
+ # Make sure not to do a --delete on sync as it will remove the other architecture
+ run: |
+ if [ -z "${{ steps.get-target-info.outputs.target }}" ]; then
+ echo "Invalid (empty) target defined"
+ exit 1
+ fi
+ shell: bash
+
+ # Pick up latest master version
+ - name: Checkout code for action
+ if: inputs.environment == 'staging'
+ uses: actions/checkout@v4
+ with:
+ path: action-support
+
+ - name: Push packages to S3
+ # Only upload for staging
+ if: inputs.environment == 'staging'
+ uses: ./action-support/.github/actions/sync-to-bucket
+ with:
+ bucket: ${{ secrets.bucket }}
+ access_key_id: ${{ secrets.access_key_id }}
+ secret_access_key: ${{ secrets.secret_access_key }}
+ bucket-directory: "${{ inputs.version }}/${{ steps.get-target-info.outputs.target }}/"
+ source-directory: "packaging/packages/${{ matrix.distro }}/${{ inputs.version }}/staging/"
+
+ call-build-linux-packages-repo:
+ name: Create repo metadata in S3
+ # Only upload for staging
+ if: inputs.environment == 'staging'
+ # Need to use 18.04 as 20.04 has no createrepo available
+ runs-on: ubuntu-22.04
+ environment: ${{ inputs.environment }}
+ needs:
+ - call-build-linux-packages
+ steps:
+ - name: Install dependencies
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y createrepo-c aptly awscli
+
+ - name: Checkout code for repo metadata construction - always latest
+ uses: actions/checkout@v4
+
+ - name: Import GPG key for signing
+ id: import_gpg
+ uses: crazy-max/ghaction-import-gpg@v6
+ with:
+ gpg_private_key: ${{ secrets.gpg_private_key }}
+ passphrase: ${{ secrets.gpg_private_key_passphrase }}
+
+ - name: Create repositories on staging now
+ # We sync down what we have for the release directories.
+ # Create the repo metadata then upload to the root of the bucket.
+ # This will wipe out any versioned directories in the process.
+ run: |
+ rm -rf ./latest/
+ mkdir -p ./latest/
+ if [ -n "${AWS_S3_ENDPOINT}" ]; then
+ ENDPOINT="--endpoint-url ${AWS_S3_ENDPOINT}"
+ fi
+ aws s3 sync "s3://$AWS_S3_BUCKET/${{ inputs.version }}" ./latest/ --no-progress ${ENDPOINT}
+
+ gpg --export -a "${{ steps.import_gpg.outputs.name }}" > ./latest/fluentbit.key
+ rpm --import ./latest/fluentbit.key
+
+ ./update-repos.sh "./latest/"
+ echo "${{ inputs.version }}" > "./latest/latest-version.txt"
+ aws s3 sync "./latest/" "s3://$AWS_S3_BUCKET" --delete --follow-symlinks --no-progress ${ENDPOINT}
+ env:
+ GPG_KEY: ${{ steps.import_gpg.outputs.name }}
+ AWS_REGION: "us-east-1"
+ AWS_ACCESS_KEY_ID: ${{ secrets.access_key_id }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.secret_access_key }}
+ AWS_S3_BUCKET: ${{ secrets.bucket }}
+ # To use with Minio locally (or update to whatever endpoint you want)
+ # AWS_S3_ENDPOINT: http://localhost:9000
+ shell: bash
+ working-directory: packaging