1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-19 20:57:53 +02:00
Maxime VISONNEAU 3c0c7148fd
blob: permit skipping the configuration of the Content-Disposition header (#4832)
This change would allow users to disable the `Content-Disposition`
header that is set for blob storage operations. The application will
continue to set a default value for `Content-Disposition` of
`attachment; filename={{.Filename}}` if no value was provided by the
user. However, with this change, users can now specifically disable this
header by setting the value to "-" in the configuration.

We feel this would be a nice solution for this issue:
https://github.com/Homebrew/brew/issues/15604
2024-05-09 22:13:46 -03:00

184 lines
5.2 KiB
Markdown

# 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
# Path/name inside the bucket.
#
# Default: '{{ .ProjectName }}/{{ .Tag }}'
# Templates: allowed
directory: "foo/bar/{{.Version}}"
# Whether to disable this particular upload configuration.
#
# Since: v1.17
# Templates: allowed
disable: '{{ neq .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.
# Since: v1.17 (pro)
# Templates: allowed
templated_extra_files:
- src: LICENSE.tpl
dst: LICENSE.txt
# Allow to disable `s3ForcePathStyle`.
#
# Default: true
# Since: v1.24
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: empty
# Since: v1.24
acl: foo
# Cache control options.
#
# If you need different `cache_control` options for different files,
# create multiple `blobs` configurations.
#
# Default: empty
# Since: v1.24
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.
#
# Since: v1.24
# 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}}"
```
!!! tip
Learn more about the [name template engine](/customization/templates/).
## 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