diff --git a/.github/workflows/docker-buildx.yaml b/.github/workflows/docker-buildx.yaml index b4d070e..26b21b3 100644 --- a/.github/workflows/docker-buildx.yaml +++ b/.github/workflows/docker-buildx.yaml @@ -21,23 +21,37 @@ env: IMAGE_NAME_FULL: ${{ github.repository_owner }}/terraform-azure-cli jobs: + load-matrix-build: + runs-on: ubuntu-latest + permissions: + contents: read + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - name: Check out the repo + uses: actions/checkout@v4 + + - name: Save supported versions as output + id: set-matrix + run: | + echo 'matrix<> $GITHUB_OUTPUT + cat versions.json >> $GITHUB_OUTPUT + echo 'EOF' >> $GITHUB_OUTPUT + docker-buildx: runs-on: ubuntu-latest + needs: load-matrix-build permissions: contents: read packages: write attestations: write id-token: write + strategy: + matrix: ${{ fromJSON(needs.load-matrix-build.outputs.matrix) }} steps: - name: Checkout uses: actions/checkout@v4 - - name: Set versions - id: version - run: | - echo "terraform_version=$(jq -r '.terraform_version' versions.json)" >> $GITHUB_OUTPUT - echo "azure_cli_version=$(jq -r '.azure_cli_version' versions.json)" >> $GITHUB_OUTPUT - - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -66,8 +80,8 @@ jobs: org.opencontainers.image.vendor=${{ github.repository_owner}} org.opencontainers.image.title=${{ env.IMAGE_NAME}} org.opencontainers.image.description="This image contains azure-cli and terraform to be used in CI/CD pipelines or local development." - com.hashicorp.terraform.version=${{ steps.version.outputs.terraform_version }} - com.azure.cli.version=${{ steps.version.outputs.azure_cli_version }} + com.hashicorp.terraform.version=${{ matrix.terraform_versions }} + com.azure.cli.version=${{ matrix.azure_cli_versions }} - name: Build and push id: docker_build @@ -81,18 +95,18 @@ jobs: linux/amd64 linux/arm64/v8 build-args: | - TERRAFORM_VERSION=${{ steps.version.outputs.terraform_version }} - AZURE_CLI_VERSION=${{ steps.version.outputs.azure_cli_version }} + TERRAFORM_VERSION=${{ matrix.terraform_versions }} + AZURE_CLI_VERSION=${{ matrix.azure_cli_versions }} labels: ${{ steps.meta.outputs.labels }} annotations: ${{ steps.meta.outputs.annotations }} tags: | - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_FULL }}:latest - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_FULL }}:terraform-${{ steps.version.outputs.terraform_version }}-azure-cli-${{ steps.version.outputs.azure_cli_version }} + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_FULL }}:terraform-${{ matrix.terraform_versions }}-azure-cli-${{ matrix.azure_cli_versions }} ${{ steps.meta.outputs.tags }} - - name: Generate artifact attestation + - if: github.event_name != 'pull_request' + name: Generate artifact attestation uses: actions/attest-build-provenance@v1 with: subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_FULL}} subject-digest: ${{ steps.docker_build.outputs.digest }} - push-to-registry: true + push-to-registry: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/get-latest-versions.yaml b/.github/workflows/get-latest-versions.yaml index 8a54555..9cf0629 100644 --- a/.github/workflows/get-latest-versions.yaml +++ b/.github/workflows/get-latest-versions.yaml @@ -26,17 +26,14 @@ jobs: release_url: https://api.github.com/repos/${{ matrix.repository }}/releases/latest run: | version=$(curl -sL ${{ env.release_url }} | jq -r '.tag_name' | tr -d 'v' | sed 's/^azure-cli-//') - + repository=${{ matrix.repository }} # Update the JSON file based on the repository - if [[ "$repository" == "hashicorp/terraform" ]]; then - jq --arg version "$version" '.terraform_version = $version' versions.json > tmp.json && mv tmp.json versions.json - elif [[ "$repository" == "Azure/azure-cli" ]]; then - jq --arg version "$version" '.azure_cli_version = $version' versions.json > tmp.json && mv tmp.json versions.json - else - echo "Unknown repository: $repository" - exit 1 + if [[ "$repository" == "hashicorp/terraform" ]] && [[ "$version" != "$(jq -r '.terraform_versions[0]' versions.json)" ]]; then + jq --arg version "$version" '.terraform_versions |= [$version] + .[:-1]' versions.json > tmp.json && mv tmp.json versions.json + elif [[ "$repository" == "Azure/azure-cli" ]] && [[ "$version" != "$(jq -r '.azure_cli_versions[0]' versions.json)" ]]; then + jq --arg version "$version" '.azure_cli_versions |= [$version] + .[:-1]' versions.json > tmp.json && mv tmp.json versions.json fi echo "version=$version" >> $GITHUB_OUTPUT @@ -52,4 +49,4 @@ jobs: git config --global user.email 'action@github.com' git commit -am "Update ${{ matrix.repository }} package version to ${{ steps.version.outputs.version }}" git pull --rebase - git push \ No newline at end of file + git push diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..44c12a1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.insertFinalNewline": true, + "[json]": { + "editor.defaultFormatter": "vscode.json-language-features" + } +} diff --git a/versions.json b/versions.json index 73499f4..fb5b0b1 100644 --- a/versions.json +++ b/versions.json @@ -1,4 +1,12 @@ { - "terraform_version": "1.9.5", - "azure_cli_version": "2.63.0" + "terraform_versions": [ + "1.9.4", + "1.9.3", + "1.9.2" + ], + "azure_cli_versions": [ + "2.63.0", + "2.62.0", + "2.61.0" + ] }