instruction: Create a GitHub Actions workflow for CI/CD automation with automated testing
output: ## release.yml
  
  **Repository:** helm/helm
  **File Type:** Github Workflow
  **Purpose:** Production configuration from helm project
  
  ```yaml
  name: release
  on:
    create:
      tags:
        - v*
    push:
      branches:
        - main
  
  permissions: read-all
  
  # Note the only differences between release and canary-release jobs are:
  # - only canary passes --overwrite flag
  # - the VERSION make variable passed to 'make dist checksum' is expected to
  #   be "canary" if the job is triggered by a push to "main" branch. If the
  #   job is triggered by a tag push, VERSION should be the tag ref.
  jobs:
    release:
      if: startsWith(github.ref, 'refs/tags/v')
      runs-on: ubuntu-latest-16-cores
      steps:
        - name: Checkout source code
          uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # pin@v5.0.0
          with:
            fetch-depth: 0
  
        - name: Add variables to environment file
          run: cat ".github/env" >> "$GITHUB_ENV"
  
        - name: Setup Go
          uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # pin@5.5.0
          with:
            go-version: '${{ env.GOLANG_VERSION }}'
        - name: Run unit tests
          run: make test-coverage
        - name: Build Helm Binaries
          run: |
            set -eu -o pipefail
  
            make build-cross VERSION="${{ github.ref_name }}"
            make dist checksum VERSION="${{ github.ref_name }}"
  
        - name: Set latest version
          run: |
            set -eu -o pipefail
  
            mkdir -p _dist_versions
  
            # Push the latest semver tag, excluding prerelease tags
            LATEST_VERSION="$(git tag | sort -r --version-sort | grep '^v[0-9]' | grep -v '-' | head -n1)"
            echo "LATEST_VERSION=${LATEST_VERSION}"
            echo "${LATEST_VERSION}" > _dist_versions/helm-latest-version
            echo "${LATEST_VERSION}" > _dist_versions/helm3-latest-version
  
        - name: Upload Binaries
          uses: bacongobbler/azure-blob-storage-upload@50f7d898b7697e864130ea04c303ca38b5751c50 # pin@3.0.0
          env:
            AZURE_STORAGE_CONNECTION_STRING: "${{ secrets.AZURE_STORAGE_CONNECTION_STRING }}"
            AZURE_STORAGE_CONTAINER_NAME: "${{ secrets.AZURE_STORAGE_CONTAINER_NAME }}"
          with:
            source_dir: _dist
            container_name: ${{ secrets.AZURE_STORAGE_CONTAINER_NAME }}
            connection_string: ${{ secrets.AZURE_STORAGE_CONNECTION_STRING }}
            extra_args: '--pattern helm-*'
  
        - name: Upload Version tag files
          uses: bacongobbler/azure-blob-storage-upload@50f7d898b7697e864130ea04c303ca38b5751c50 # pin@3.0.0
          env:
            AZURE_STORAGE_CONNECTION_STRING: "${{ secrets.AZURE_STORAGE_CONNECTION_STRING }}"
            AZURE_STORAGE_CONTAINER_NAME: "${{ secrets.AZURE_STORAGE_CONTAINER_NAME }}"
          with:
            overwrite: 'true'
            source_dir: _dist_versions
            container_name: ${{ secrets.AZURE_STORAGE_CONTAINER_NAME }}
            connection_string: ${{ secrets.AZURE_STORAGE_CONNECTION_STRING }}
  
    canary-release:
      runs-on: ubuntu-latest-16-cores
      if: github.ref == 'refs/heads/main'
      steps:
        - name: Checkout source code
          uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # pin@v5.0.0
  
        - name: Add variables to environment file
          run: cat ".github/env" >> "$GITHUB_ENV"
  
        - name: Setup Go
          uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # pin@5.5.0
          with:
            go-version: '${{ env.GOLANG_VERSION }}'
            check-latest: true
  
        - name: Run unit tests
          run: make test-coverage
  
        - name: Build Helm Binaries
          run: |
            make build-cross
            make dist checksum VERSION="canary"
  
        - name: Upload Binaries
          uses: bacongobbler/azure-blob-storage-upload@50f7d898b7697e864130ea04c303ca38b5751c50 # pin@3.0.0
          with:
            source_dir: _dist
            container_name: ${{ secrets.AZURE_STORAGE_CONTAINER_NAME }}
            connection_string: ${{ secrets.AZURE_STORAGE_CONNECTION_STRING }}
            extra_args: '--pattern helm-*'
            # WARNING: this will overwrite existing blobs in your blob storage
            overwrite: 'true'
  
  ```
  
  This GitHub Actions workflow demonstrates production CI/CD practices including automated testing, building, and deployment.