aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/release.yml
blob: f8fd14dfad8781f84d18072e647f3f2057a31f35 (plain) (blame)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
name: Release
on:
  # schedule:
  # - cron: '0 0 * * *' # midnight UTC

  push:
    tags:
    - 'v[0-9]+.[0-9]+.[0-9]+'
    ## - release

jobs:
  dist:
    name: Dist
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false # don't fail other jobs if one fails
      matrix:
        build: [x86_64-linux, aarch64-linux, x86_64-macos, x86_64-windows] #, x86_64-win-gnu, win32-msvc
        include:
        - build: x86_64-linux
          os: ubuntu-20.04
          rust: stable
          target: x86_64-unknown-linux-gnu
          cross: false
        - build: aarch64-linux
          os: ubuntu-20.04
          rust: stable
          target: aarch64-unknown-linux-gnu
          cross: true
        - build: x86_64-macos
          os: macos-latest
          rust: stable
          target: x86_64-apple-darwin
          cross: false
        - build: x86_64-windows
          os: windows-2019
          rust: stable
          target: x86_64-pc-windows-msvc
          cross: false
        # - build: x86_64-win-gnu
        #   os: windows-2019
        #   rust: stable-x86_64-gnu
        #   target: x86_64-pc-windows-gnu
        # - build: win32-msvc
        #   os: windows-2019
        #   rust: stable
        #   target: i686-pc-windows-msvc

    steps:
      - name: Checkout sources
        uses: actions/checkout@v2
        with:
          submodules: true

      - name: Install ${{ matrix.rust }} toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.rust }}
          target: ${{ matrix.target }}
          override: true

      - name: Run cargo test
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --locked

      - name: Build release binary
        uses: actions-rs/cargo@v1
        with:
          use-cross: ${{ matrix.cross }}
          command: build
          args: --release --locked --target ${{ matrix.target }}

      - name: Strip release binary (linux and macos)
        if: matrix.build == 'x86_64-linux' || matrix.build == 'x86_64-macos'
        run: strip "target/${{ matrix.target }}/release/hx"

      - name: Strip release binary (arm)
        if: matrix.build == 'aarch64-linux'
        run: |
          docker run --rm -v \
            "$PWD/target:/target:Z" \
            rustembedded/cross:${{ matrix.target }} \
            aarch64-linux-gnu-strip \
            /target/${{ matrix.target }}/release/hx

      - name: Calculate tag name
        run: |
          name=dev
          if [[ $GITHUB_REF == refs/tags/v* ]]; then
            name=${GITHUB_REF:10}
          fi
          echo ::set-output name=val::$name
          echo TAG=$name >> $GITHUB_ENV
        id: tagname

      - name: Build archive
        shell: bash
        run: |
          # outdir="$(ci/cargo-out-dir "${{ env.TARGET_DIR }}")"
          staging="helix-${{ env.RELEASE_VERSION }}-${{ matrix.target }}"
          mkdir "$staging"
          cp {README.md,LICENSE} "$staging/"
          # cp {CHANGELOG.md,FAQ.md,GUIDE.md} "$staging/doc/"
          # cp "$outdir"/{hx.bash,hx.fish,_hx.ps1} "$staging/complete/"
          # cp complete/_hx "$staging/complete/"
          if [ "${{ matrix.os }}" = "windows-2019" ]; then
            cp "target/${{ matrix.target }}/release/hx.exe" "$staging/"
            7z a "$staging.zip" "$staging"
            echo "ASSET=$staging.zip" >> $GITHUB_ENV
          else
            # The man page is only generated on Unix systems. ¯\_(ツ)_/¯
            # cp "$outdir"/hx.1 "$staging/doc/"
            cp "target/${{ matrix.target }}/release/hx" "$staging/"
            tar czf "$staging.tar.gz" "$staging"
            echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV
          fi

      # package
      - uses: actions/upload-artifact@v1
        with:
          name: tarballs-${{ matrix.build }}
          path: ${{ env.ASSET }}

  publish:
    name: Publish
    needs: [dist]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v2
        with:
          path: dist
      - run: ls -al ./dist

      - name: Calculate tag name
        run: |
          name=dev
          if [[ $GITHUB_REF == refs/tags/v* ]]; then
            name=${GITHUB_REF:10}
          fi
          echo ::set-output name=val::$name
          echo TAG=$name >> $GITHUB_ENV
        id: tagname

      - name: Upload binaries to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: dist/**/*
          file_glob: true
          tag: ${{ steps.tagname.outputs.val }}
          overwrite: true