# Blobs (s3, gcs, azblob) The `blobs` allows you to upload artifacts to Amazon S3, Azure Blob and Google GCS. ## Customization ```yaml # .goreleaser.yaml blobs: # You can have multiple blob configs - # Cloud provider name: # - s3 for AWS S3 Storage # - azblob for Azure Blob Storage # - gs for Google Cloud Storage # # Templates: allowed. provider: azblob # Set a custom endpoint, useful if you're using a minio backend or # other s3-compatible backends. # # Implies s3ForcePathStyle and requires provider to be `s3` # # Templates: allowed. endpoint: https://minio.foo.bar # Sets the bucket region. # Requires provider to be `s3` # # Templates: allowed. region: us-west-1 # Disables SSL # Requires provider to be `s3` disable_ssl: true # Bucket name. # # Templates: allowed. bucket: goreleaser-bucket # IDs of the artifacts you want to upload. ids: - foo - bar # Allows to further filter the artifacts. # # Artifacts that do not match this expression will be ignored. # # Since: v2.3 (pro). # Templates: allowed. if: '{{ eq .Os "linux" }}' # Path/name inside the bucket. # # Default: '{{ .ProjectName }}/{{ .Tag }}'. # Templates: allowed. directory: "foo/bar/{{.Version}}" # Whether to disable this particular upload configuration. # # Templates: allowed. disable: '{{ ne .BLOB_UPLOAD_ONLY "foo" }}' # You can add extra pre-existing files to the bucket. # # The filename on the release will be the last part of the path (base). # If another file with the same name exists, the last one found will be used. # These globs can also include templates. extra_files: - glob: ./path/to/file.txt - glob: ./glob/**/to/**/file/**/* - glob: ./glob/foo/to/bar/file/foobar/override_from_previous - glob: ./single_file.txt # Templates: allowed. name_template: file.txt # note that this only works if glob matches 1 file only # Additional templated extra files to uploaded. # Those files will have their contents pass through the template engine, # and its results will be uploaded. # # This feature is only available in GoReleaser Pro. # Templates: allowed. templated_extra_files: - src: LICENSE.tpl dst: LICENSE.txt # Allow to disable `s3ForcePathStyle`. # # Default: true. s3_force_path_style: false # ACL to be applied to all files in this configuration. # # If you need different ACLs for different files, create multiple `blobs` # configurations. # # Only available when `provider` is S3. # # Default: ''. acl: foo # Cache control options. # # If you need different `cache_control` options for different files, # create multiple `blobs` configurations. # # Default: ''. cache_control: - max-age=9999 - public # Allows to set the content disposition of the file. # # If you need different `content_disposition` options for different files, # create multiple `blobs` configurations. # # Default: attachment;filename={{.Filename}}. # Templates: allowed. # Disable by setting the value to '-' content_disposition: "inline" - provider: gs bucket: goreleaser-bucket directory: "foo/bar/{{.Version}}" - provider: s3 bucket: goreleaser-bucket directory: "foo/bar/{{.Version}}" # Upload metadata.json and artifacts.json to the release as well. include_meta: true # Upload only the files defined in extra_files. extra_files_only: true ``` ## Authentication GoReleaser's blob pipe authentication varies depending upon the blob provider as mentioned below: ### S3 Provider S3 provider support AWS [default credential provider](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials) chain in the following order: - Environment variables. - Shared credentials file. - If your application is running on an Amazon EC2 instance, IAM role for Amazon EC2. ### Azure Blob Provider ```yaml blobs: - provider: azblob bucket: releases?storage_account=myazurestorage ``` Storage account is set over URL param `storage_account` in `bucket` or in environment variable `AZURE_STORAGE_ACCOUNT` It supports authentication with - [environment variables](https://docs.microsoft.com/en-us/azure/storage/common/storage-azure-cli#set-default-azure-storage-account-environment-variables): - `AZURE_STORAGE_KEY` or `AZURE_STORAGE_SAS_TOKEN` - [default Azure credential](https://learn.microsoft.com/en-us/azure/developer/go/azure-sdk-authentication-service-principal) ### [GCS Provider](https://cloud.google.com/docs/authentication/production) GCS provider uses [Application Default Credentials](https://cloud.google.com/docs/authentication/production) in the following order: - Environment Variable (`GOOGLE_APPLICATION_CREDENTIALS`) - Default Service Account from the compute instance (Compute Engine, Kubernetes Engine, Cloud function etc). ## ACLs There is no common way to set ACLs across all bucket providers, so, [go-cloud][] [does not support it yet][issue1108]. You are expected to set the ACLs on the bucket/directory/etc, depending on your provider. [go-cloud]: https://gocloud.dev/howto/blob/ [issue1108]: https://github.com/google/go-cloud/issues/1108