Skip to content

Commit

Permalink
Feat: Build docker image for the latest three available versions (#3)
Browse files Browse the repository at this point in the history
* feat: update version store to contain multiple versions

* Update Azure/azure-cli package version to 2.62.0

* fix: wrong versions file name

* fix: remove duplicate azure-cli version

* Update Azure/azure-cli package version to 2.62.0

* Update hashicorp/terraform package version to 1.9.3

* chore: temporary remove latest tag

* chore: remove duplicate versions again

* Update Azure/azure-cli package version to 2.62.0

* Update hashicorp/terraform package version to 1.9.3

* add json formatter for vscode

* fix: remove duplicate versions

* feat: add check to only add new version to versions.json

* Update hashicorp/terraform package version to 1.9.4

* Update Azure/azure-cli package version to 2.63.0

* fix: remove message of unknown repository

* Update Azure/azure-cli package version to 2.63.0

* chore: remove deprecated ::set-output to set github output

* fix: do not push build provenance attestations on pull requests build since they only run for validation purposes

* fix: escape matrix json suitable for github outputs

* add ending new line to versions.json

* disable artifact attestation on pull request since no images get's exported. See docker/build-push-action#906

---------

Co-authored-by: GitHub Action <action@github.com>
  • Loading branch information
clowa and actions-user committed Aug 21, 2024
1 parent 9d62482 commit d949c91
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 25 deletions.
42 changes: 28 additions & 14 deletions .github/workflows/docker-buildx.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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<<EOF' >> $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

Expand Down Expand Up @@ -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
Expand All @@ -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' }}
15 changes: 6 additions & 9 deletions .github/workflows/get-latest-versions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
git push
6 changes: 6 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"files.insertFinalNewline": true,
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features"
}
}
12 changes: 10 additions & 2 deletions versions.json
Original file line number Diff line number Diff line change
@@ -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"
]
}

0 comments on commit d949c91

Please sign in to comment.