Skip to content

Commit 6ab5e20

Browse files
committed
Setup Github Actions CI
1 parent 9bc9c86 commit 6ab5e20

File tree

3 files changed

+295
-3
lines changed

3 files changed

+295
-3
lines changed

.github/workflows/haskell.yml

Lines changed: 279 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
1+
name: Binaries
2+
3+
defaults:
4+
run:
5+
shell: bash
6+
7+
on:
8+
push:
9+
branches:
10+
- 'main'
11+
tags:
12+
- "v*"
13+
pull_request:
14+
15+
jobs:
16+
build:
17+
environment: cabal-cache
18+
19+
runs-on: ${{ matrix.os }}
20+
21+
strategy:
22+
fail-fast: false
23+
matrix:
24+
ghc: ["8.6.5", "8.10.4"]
25+
os: [ubuntu-latest, macos-latest, windows-latest]
26+
27+
steps:
28+
- uses: actions/checkout@v2
29+
30+
- name: Select optimal cabal version
31+
run: |
32+
case "$OS" in
33+
Windows_NT) echo "CABAL_VERSION=3.4.0.1-rc3" >> $GITHUB_ENV;;
34+
*) echo "CABAL_VERSION=3.4.0.0" >> $GITHUB_ENV;;
35+
esac
36+
37+
- uses: haskell/actions/setup@v1
38+
id: setup-haskell
39+
with:
40+
ghc-version: ${{ matrix.ghc }}
41+
cabal-version: ${{ env.CABAL_VERSION }}
42+
43+
- name: Cache configuration
44+
run: |
45+
echo "GIT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
46+
echo "CACHE_VERSION=3oqhaby" >> $GITHUB_ENV
47+
48+
- name: Configure project
49+
run: cabal configure --enable-tests --enable-benchmarks --write-ghc-environment-files=ghc8.4.4+
50+
51+
- name: Record dependencies
52+
run: |
53+
cat ${{ env.PLAN_JSON }} | jq -r '."install-plan"[].id' | sort | uniq > dependencies.txt
54+
55+
- name: Restore cabal cache
56+
uses: haskell-works/cabal-cache-action@v1
57+
env:
58+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
59+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
60+
BINARY_CACHE_THREADS: ${{ secrets.BINARY_CACHE_THREADS }}
61+
BINARY_CACHE_REGION: ${{ secrets.BINARY_CACHE_REGION }}
62+
BINARY_CACHE_URI: ${{ secrets.BINARY_CACHE_URI }}
63+
with:
64+
args: |
65+
sync-from-archive \
66+
--threads "$BINARY_CACHE_THREADS" \
67+
--archive-uri "$BINARY_CACHE_URI" \
68+
--region "$BINARY_CACHE_REGION" \
69+
--store-path "${{ steps.setup-haskell.outputs.cabal-store }}"
70+
71+
- name: Build dependencies
72+
run: cabal build --dependencies-only --enable-tests --enable-benchmarks --write-ghc-environment-files=ghc8.4.4+
73+
74+
- name: Save cabal cache
75+
uses: haskell-works/cabal-cache-action@v1
76+
if: ${{ always() }}
77+
env:
78+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
79+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
80+
BINARY_CACHE_THREADS: ${{ secrets.BINARY_CACHE_THREADS }}
81+
BINARY_CACHE_REGION: ${{ secrets.BINARY_CACHE_REGION }}
82+
BINARY_CACHE_URI: ${{ secrets.BINARY_CACHE_URI }}
83+
with:
84+
args: |
85+
sync-to-archive \
86+
--threads "$BINARY_CACHE_THREADS" \
87+
--archive-uri "$BINARY_CACHE_URI" \
88+
--region "$BINARY_CACHE_REGION" \
89+
--store-path "${{ steps.setup-haskell.outputs.cabal-store }}"
90+
91+
- name: Build
92+
run: cabal build all --enable-tests --enable-benchmarks --write-ghc-environment-files=ghc8.4.4+
93+
94+
- name: Save cabal cache
95+
uses: haskell-works/cabal-cache-action@v1
96+
if: ${{ always() }}
97+
env:
98+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
99+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
100+
BINARY_CACHE_THREADS: ${{ secrets.BINARY_CACHE_THREADS }}
101+
BINARY_CACHE_REGION: ${{ secrets.BINARY_CACHE_REGION }}
102+
BINARY_CACHE_URI: ${{ secrets.BINARY_CACHE_URI }}
103+
with:
104+
args: |
105+
sync-to-archive \
106+
--threads "$BINARY_CACHE_THREADS" \
107+
--archive-uri "$BINARY_CACHE_URI" \
108+
--region "$BINARY_CACHE_REGION" \
109+
--store-path "${{ steps.setup-haskell.outputs.cabal-store }}"
110+
111+
- name: Test
112+
run: cabal test all --enable-tests --enable-benchmarks --write-ghc-environment-files=ghc8.4.4+
113+
114+
- name: Compress Binary
115+
id: compress_binary
116+
env:
117+
GHC_VER: ${{ matrix.ghc }}
118+
run: |
119+
cat dist-newstyle/cache/plan.json | jq -r '
120+
."install-plan"[]
121+
| select(."component-name")
122+
| select(.style == "local")
123+
| select(."component-name" | startswith("exe:"))
124+
| ."bin-file"' > release-files.txt
125+
126+
mkdir -p artifacts
127+
128+
echo "Publishing the following files:"
129+
130+
while IFS= read -r line; do
131+
echo " $line"
132+
cp "$line" artifacts
133+
done < release-files.txt
134+
135+
tar zcvf artifacts-${{ runner.OS }}-${{ matrix.ghc }}.tar.gz artifacts
136+
137+
- uses: actions/upload-artifact@v2
138+
with:
139+
name: artifacts-${{ runner.OS }}-${{ matrix.ghc }}.tar.gz
140+
path: artifacts-${{ runner.OS }}-${{ matrix.ghc }}.tar.gz
141+
142+
check:
143+
needs: build
144+
runs-on: ubuntu-latest
145+
outputs:
146+
tag: ${{ steps.tag.outputs.tag }}
147+
148+
steps:
149+
- uses: actions/checkout@v2
150+
151+
- name: Check if cabal project is sane
152+
run: |
153+
PROJECT_DIR=$PWD
154+
mkdir -p $PROJECT_DIR/build/sdist
155+
for i in $(git ls-files | grep '\.cabal'); do
156+
cd $PROJECT_DIR && cd `dirname $i`
157+
cabal check
158+
done
159+
160+
- name: Tag new version
161+
id: tag
162+
if: ${{ github.ref == 'refs/heads/main' }}
163+
run: |
164+
package_version="$(cat *.cabal | grep '^version:' | cut -d : -f 2 | xargs)"
165+
166+
echo "Package version is v$package_version"
167+
168+
git fetch --unshallow origin
169+
170+
if git tag "v$package_version"; then
171+
echo "Tagging with new version "v$package_version""
172+
173+
if git push origin "v$package_version"; then
174+
echo "Tagged with new version "v$package_version""
175+
176+
echo "::set-output name=tag::v$package_version"
177+
fi
178+
fi
179+
180+
- name: Show tag
181+
run: |
182+
echo "Ref: ${{ github.ref }}"
183+
echo "Tag: ${{ steps.tag.outputs.tag }}"
184+
185+
186+
release:
187+
needs: [build, check]
188+
runs-on: ubuntu-latest
189+
190+
if: ${{ needs.check.outputs.tag != '' }}
191+
192+
outputs:
193+
upload_url: ${{ steps.create_release.outputs.upload_url }}
194+
195+
steps:
196+
- uses: actions/checkout@v2
197+
198+
- name: Create source distribution
199+
run: |
200+
PROJECT_DIR=$PWD
201+
mkdir -p $PROJECT_DIR/build/sdist
202+
for i in $(git ls-files | grep '\.cabal'); do
203+
cd $PROJECT_DIR && cd `dirname $i`
204+
cabal v2-sdist -o $PROJECT_DIR/build/sdist
205+
done;
206+
207+
- name: Generate Changelog
208+
run: |
209+
git fetch --unshallow
210+
211+
if git describe --tags 'HEAD^' --abbrev=0 > last-tag; then
212+
git log --no-merges --format="%C(auto) %h %s" "$(cat last-tag)..HEAD"
213+
else
214+
git log --no-merges --format="%C(auto) %h %s"
215+
fi > changelog.txt
216+
217+
cat changelog.txt
218+
219+
- name: Create Release
220+
id: create_release
221+
uses: actions/create-release@v1
222+
env:
223+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
224+
with:
225+
tag_name: ${{ needs.check.outputs.tag }}
226+
release_name: Release ${{ needs.check.outputs.tag }}
227+
draft: false
228+
prerelease: false
229+
body_path: changelog.txt
230+
231+
publish:
232+
needs: [build, release]
233+
234+
runs-on: ${{ matrix.os }}
235+
236+
if: ${{ needs.check.outputs.tag != '' }}
237+
238+
strategy:
239+
fail-fast: false
240+
matrix:
241+
ghc: ["8.10.4"]
242+
os: [ubuntu-latest, macos-latest]
243+
244+
steps:
245+
- uses: actions/download-artifact@v2
246+
id: download_artifact
247+
with:
248+
name: artifacts-${{ runner.OS }}-${{ matrix.ghc }}.tar.gz
249+
path: .
250+
251+
- name: Compute axes
252+
id: axes
253+
run: |
254+
case ${{ matrix.os }} in
255+
ubuntu-*) os="linux" ;;
256+
macos-*) os="darwin" ;;
257+
windows-*) os="windows" ;;
258+
*) exit 1 ;; # error
259+
esac
260+
arch_os="$(uname -m)-$os"
261+
echo "::set-output name=arch_os::$arch_os"
262+
263+
- name: Upload Artifacts to Release
264+
uses: softprops/action-gh-release@v1
265+
if: startsWith(github.ref, 'refs/tags/')
266+
env:
267+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
268+
with:
269+
files: artifacts-${{ runner.OS }}-${{ matrix.ghc }}.tar.gz
270+
271+
- name: Upload Artifacts to Release
272+
uses: actions/[email protected]
273+
env:
274+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
275+
with:
276+
upload_url: ${{ needs.release.outputs.upload_url }}
277+
asset_path: artifacts-${{ runner.OS }}-${{ matrix.ghc }}.tar.gz
278+
asset_name: artifacts-${{ runner.OS }}-${{ matrix.ghc }}.tar.gz
279+
asset_content_type: application/tar+gzip

cabal.project

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
packages: .
2+
3+
source-repository-package
4+
type: git
5+
location: https://github.com/input-output-hk/Win32-network
6+
tag: d81187239fe5f303aa1770565ad307efa605c820
7+
--sha256: 13plwx6k7rh5g8m2ri6s7c3l952pg6ayfm76qw2hlnihywal1526

hedgehog-extras.cabal

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1-
cabal-version: 2.4
1+
cabal-version: 3.0
22

33
name: hedgehog-extras
44
version: 0.1.0.0
5-
description: The cardano full node
5+
synopsis: Supplemental library for hedgehog
6+
description: Supplemental library for hedgehog.
7+
category: Test
68
author: IOHK
79
maintainer: [email protected]
810
license: Apache-2.0
911
license-files: LICENSE
1012
NOTICE
1113
build-type: Simple
1214

13-
common base { build-depends: base >= 4.14 && < 4.15 }
15+
source-repository head
16+
type: git
17+
location: https://github.com/input-output-hk/hedgehog-extras
18+
19+
common base { build-depends: base >= 4.12 && < 4.15 }
1420

1521
common maybe-Win32-network
1622
if os(windows)

0 commit comments

Comments
 (0)