name: release on: push: tags: [ 'v*' ] permissions: contents: read jobs: release-flux-cli: runs-on: ubuntu-latest permissions: contents: write # needed to write releases id-token: write # needed for keyless signing packages: write # needed for ghcr access steps: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Setup QEMU uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2.1.0 - name: Setup Docker Buildx id: buildx uses: docker/setup-buildx-action@f03ac48505955848960e80bbb68046aa35c7b9e7 # v2.4.1 - name: Setup Syft uses: anchore/sbom-action/download-syft@07978da4bdb4faa726e52dfc6b1bed63d4b56479 # v0.13.3 - name: Setup Cosign uses: sigstore/cosign-installer@c3667d99424e7e6047999fb6246c0da843953c65 # v3.0.1 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to Docker Hub uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} - name: Generate manifests run: | make cmd/flux/.manifests.done ./manifests/scripts/bundle.sh "" ./output manifests.tar.gz kustomize build ./manifests/install > ./output/install.yaml - name: Build CRDs run: | kustomize build manifests/crds > all-crds.yaml - name: Generate OpenAPI JSON schemas from CRDs uses: fluxcd/pkg/actions/crdjsonschema@main with: crd: all-crds.yaml output: schemas - name: Archive the OpenAPI JSON schemas run: | tar -czvf ./output/crd-schemas.tar.gz -C schemas . - name: Download release notes utility env: GH_REL_URL: https://github.com/buchanae/github-release-notes/releases/download/0.2.0/github-release-notes-linux-amd64-0.2.0.tar.gz run: cd /tmp && curl -sSL ${GH_REL_URL} | tar xz && sudo mv github-release-notes /usr/local/bin/ - name: Generate release notes run: | NOTES="./output/notes.md" echo '## CLI Changelog' > ${NOTES} github-release-notes -org fluxcd -repo flux2 -since-latest-release -include-author >> ${NOTES} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser uses: goreleaser/goreleaser-action@f82d6c1c344bcacabba2c841718984797f664a6b # v4.2.0 with: version: latest args: release --release-notes=output/notes.md --skip-validate env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }} AUR_BOT_SSH_PRIVATE_KEY: ${{ secrets.AUR_BOT_SSH_PRIVATE_KEY }} release-flux-manifests: runs-on: ubuntu-latest needs: release-flux-cli permissions: id-token: write packages: write steps: - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI uses: ./action/ - name: Prepare id: prep run: | VERSION=$(flux version --client | awk '{ print $NF }') echo "version=${VERSION}" >> $GITHUB_OUTPUT - name: Login to GHCR uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to DockerHub uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} - name: Push manifests to GHCR run: | mkdir -p ./ghcr.io/flux-system flux install --registry=ghcr.io/fluxcd \ --components-extra=image-reflector-controller,image-automation-controller \ --export > ./ghcr.io/flux-system/gotk-components.yaml cd ./ghcr.io && flux push artifact \ oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - name: Push manifests to DockerHub run: | mkdir -p ./docker.io/flux-system flux install --registry=docker.io/fluxcd \ --components-extra=image-reflector-controller,image-automation-controller \ --export > ./docker.io/flux-system/gotk-components.yaml cd ./docker.io && flux push artifact \ oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - uses: sigstore/cosign-installer@c3667d99424e7e6047999fb6246c0da843953c65 # v3.0.1 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 run: | cosign sign --yes ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} cosign sign --yes docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} - name: Tag manifests run: | flux tag artifact oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ --tag latest flux tag artifact oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ --tag latest