---
title: "Hooks"
weight: 10
---

{{< g_version "v2.1" >}}

{{< g_featpro >}}

You can use the `before_publish` hooks to run command against artifacts before
the publishing step kicks in.

This should allow you to run it through a scanner, for example, or do pretty
much anything else you need.

It'll run as the last step before the `publish` phase kicks in when running
`goreleaser release`, and after the `build` phase when running
`goreleaser build`.

Here's the list of options available:

```yaml {filename=".goreleaser.yaml"}
before_publish:
  - # IDs of the artifacts to filter for.
    #
    # If `artifacts` is checksum or source, this fields has no effect.
    #
    # Default: no filter.
    ids:
      - foo
      - bar

    # Which artifacts to filter for.
    #
    # Valid options are:
    # - checksum:   checksum files
    # - source:     source archive
    # - package:    Linux packages (deb, rpm, apk, etc) and macOS .pkg
    # - installer:  Installers (MSI, NSIS, macOS pkgs) {{< g_inline_pro >}}
    # - diskimage:  macOS DMG disk images
    # - archive:    archives from archive pipe
    # - binary:     binaries output from the build stage
    # - sbom:       any SBOMs generated for other artifacts
    # - image:      any Docker Images
    #
    # Default: no filter.
    artifacts:
      - archive
      - binary

    # The command to run.
    #
    # Templates: allowed.
    cmd: "./scan {{.ArtifactPath}}"

    # Always prints command output.
    #
    # Default: false.
    output: true

    # Base directory to run the commands from.
    #
    # Default: current working directory..
    dir: ./submodule # specify command working directory

    # Additional environment variables to set.
    env:
      - "FILE_TO_TOUCH=something-{{ .ProjectName }}" # specify hook level environment variables
```

{{< g_templates >}}
