name: Setup Flux CLI description: A GitHub Action for running Flux commands author: Stefan Prodan branding: color: blue icon: command inputs: version: description: "Flux version e.g. 0.8.0 (defaults to latest stable release)" required: false arch: description: "arch can be amd64, arm64 or arm" required: true default: "amd64" bindir: description: "Optional location of the Flux binary. Will not use sudo if set. Updates System Path." required: false token: description: "GitHub Token used to authentication against the API (generally only needed to prevent quota limit errors)" required: false runs: using: composite steps: - name: "Download flux binary to tmp" shell: bash run: | ARCH=${{ inputs.arch }} VERSION=${{ inputs.version }} TOKEN=${{ inputs.token }} if [ -z "${VERSION}" ]; then if [ -n "${TOKEN}" ]; then VERSION_SLUG=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest --silent --location --header "Authorization: token ${TOKEN}" | grep tag_name) else # With no GITHUB_TOKEN you will experience occasional failures due to rate limiting # Ref: https://github.com/fluxcd/flux2/issues/3509#issuecomment-1400820992 VERSION_SLUG=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest --silent --location | grep tag_name) fi fi VERSION=$(echo "${VERSION_SLUG}" | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) BIN_URL="https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_${ARCH}.tar.gz" curl --silent --fail --location "${BIN_URL}" --output /tmp/flux.tar.gz mkdir -p /tmp/flux tar -C /tmp/flux/ -zxvf /tmp/flux.tar.gz - name: "Copy Flux binary to execute location" shell: bash run: | BINDIR=${{ inputs.bindir }} if [ -z "${BINDIR}" ]; then sudo cp /tmp/flux/flux /usr/local/bin else cp /tmp/flux/flux "${BINDIR}" echo "${BINDIR}" >> $GITHUB_PATH fi - name: "Cleanup tmp" shell: bash run: | rm -rf /tmp/flux/ /tmp/flux.tar.gz - name: "Verify correct installation of binary" shell: bash run: | flux -v