File: dist-push

package info (click to toggle)
direnv 2.37.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 872 kB
  • sloc: sh: 1,499; csh: 83; makefile: 7
file content (86 lines) | stat: -rwxr-xr-x 2,172 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env bash
#
# Upload binary artifacts when a new release is made.
#
# Usage: ./script/dist-push [<tag>]
#
# Depends on: bash, coreutils, jq, curl
set -euo pipefail

# Ensure that the GITHUB_TOKEN secret is included
if [[ -z "${GITHUB_TOKEN:-}" ]]; then
  echo "Set the GITHUB_TOKEN env variable."
  exit 1
fi

# Prepare the headers for our curl-command.
AUTH_HEADER="Authorization: token ${GITHUB_TOKEN}"
# Set the github repository in CI
: "${GITHUB_REPOSITORY:=direnv/direnv}"

# Create the correct Upload URL.
if [[ -n "${1:-}" ]]; then
  RELEASE_ID=$(curl -sfL \
    -H "${AUTH_HEADER}" \
    "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/tags/$1" \
    | jq .id)
else
  # if not tag is given, assume we are in CI
  RELEASE_ID=$(jq --raw-output '.release.id' "$GITHUB_EVENT_PATH")
fi

# start from the project root
cd "$(dirname "$0")/.."

# make sure we have all the dist files
make dist

# For each matching file..
for file in dist/*; do
  echo "Processing '${file}'"

  filename=$(basename "${file}")

  upload_url="https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${filename}"
  echo "Upload URL is '${upload_url}'"

  # Generate a temporary file.
  tmp=$(mktemp)

  # Upload the artifact - capturing HTTP response-code in our output file.
  if ! response=$(
    curl \
      -sSL \
      -XPOST \
      -H "${AUTH_HEADER}" \
      --upload-file "${file}" \
      --header "Content-Type:application/octet-stream" \
      --write-out "%{http_code}" \
      --output "$tmp" \
      "${upload_url}"
  ); then
    echo "**********************************"
    echo " curl command did not return zero."
    echo " Aborting"
    echo "**********************************"
    cat "$tmp"
    rm "$tmp"
    exit 1
  fi

  # If upload is not successful, we must abort
  if [[ $response -ge 400 ]]; then
    echo "***************************"
    echo " upload was not successful."
    echo " Aborting"
    echo " HTTP status is $response"
    echo "**********************************"
    cat "$tmp"
    rm "$tmp"
    exit 1
  fi

  # Show pretty output, since we already have jq
  jq . <"$tmp"
  rm "$tmp"
done