forked from chainflip-io/chainflip-backend
-
Notifications
You must be signed in to change notification settings - Fork 0
159 lines (141 loc) · 6.32 KB
/
_25_package.yml
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
155
156
157
158
159
on:
workflow_call:
inputs:
network:
description: Network being released
required: true
type: string
env:
FORCE_COLOR: 1
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
jobs:
packages:
runs-on: namespace-profile-rust-builder
container:
image: "ghcr.io/${{ github.repository }}/rust-base:nightly-2024-02-04-ubuntu-22.04-48"
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
env:
NSC_CACHE_PATH: "/cache"
volumes:
- /cache:/cache
options: --cap-add=SYS_ADMIN
steps:
- name: Checkout 🛒
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
fetch-depth: 0
- name: Download binaries from same run 📥
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
with:
name: chainflip-backend-bin
path: ./target/release
# Pull requests to release should use the same rules as the release branch itself
# For simplicity we use the same rules for branches to main, since it doesn't matter if we use "main" as the branch name.
- name: Set branch name
id: set-branch-name
run: |
echo "Working branch name: ${{ env.BRANCH_NAME }}"
echo "Github event name: ${{ github.event_name }}"
if [ "${{ github.event_name }}" = "push" ]; then
echo "push"
echo "TARGET_BRANCH=${{ github.ref_name }}" >> $GITHUB_ENV
elif [ "${{ github.event_name }}" = "pull_request" ]; then
echo "pull or merge_group"
echo ${{ github.base_ref}}
echo "TARGET_BRANCH=${{ github.base_ref }}" >> $GITHUB_ENV
fi
- name: Is the branch a release/x.y branch?
shell: bash
run: |
echo "TARGET_BRANCH: ${{ env.TARGET_BRANCH }}"
TARGET_BRANCH=${{ env.TARGET_BRANCH }}
echo "Checking if branch name $TARGET_BRANCH is a release branch"
if [[ "${TARGET_BRANCH}" =~ ^release/[0-9]+\.[0-9]+$ ]]; then
echo "Branch name ${TARGET_BRANCH} does match the required format 'release/x.y'"
echo "IS_RELEASE_BRANCH=true" >> $GITHUB_ENV
else
echo "Branch name ${TARGET_BRANCH} does NOT match the required format 'release/x.y."
echo "IS_RELEASE_BRANCH=false" >> $GITHUB_ENV
fi
- name: Extract version and compute previous version
id: extract_version
if: env.IS_RELEASE_BRANCH == 'true'
shell: bash
run: |
git config --global --add safe.directory '*'
TARGET_BRANCH=${{ env.TARGET_BRANCH }}
VERSION=${TARGET_BRANCH#release/}
MAJOR=$(echo $VERSION | cut -d. -f1)
MINOR=$(echo $VERSION | cut -d. -f2)
# Compute the previous version
if [ $MINOR -eq 0 ]; then
PREV_MAJOR=$((MAJOR - 1))
if [ $PREV_MAJOR -ge 0 ]; then
PREV_VERSION="${PREV_MAJOR}"
else
echo "No previous version available"
exit 1
fi
else
PREV_MINOR=$((MINOR - 1))
PREV_VERSION="${MAJOR}.${PREV_MINOR}"
fi
echo "Previous version: $PREV_VERSION"
if [[ "$PREV_VERSION" == *.* ]]; then
# Find the highest tag matching the previous minor version prefix
HIGHEST_TAG=$(git tag -l "${PREV_VERSION}.*" | sort -V | tail -n 1)
else
# Find the highest tag for the previous major version
HIGHEST_TAG=$(git tag -l "${PREV_VERSION}.*.*" | sort -V | tail -n 1)
fi
if [ -z "$HIGHEST_TAG" ]; then
echo "No tags found for previous version $PREV_VERSION"
exit 1
fi
echo "HIGHEST_TAG=$HIGHEST_TAG"
PREVIOUS_RELEASE_COMMIT=$(git rev-list -n 1 $HIGHEST_TAG)
echo "PREVIOUS_RELEASE_COMMIT=$PREVIOUS_RELEASE_COMMIT"
echo "PREVIOUS_RELEASE_COMMIT=$PREVIOUS_RELEASE_COMMIT" >> $GITHUB_ENV
# If we're on a release branch we need to download the previous release binaries
- name: Download latest release binaries for release branch.
if: env.IS_RELEASE_BRANCH == 'true'
uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d
with:
workflow: release-berghain.yml
name: chainflip-backend-bin
commit: ${{ env.PREVIOUS_RELEASE_COMMIT }}
github_token: ${{ secrets.CF_BACKEND_GITHUB_TOKEN }}
path: latest-release
# If we're on main then the latest run of the release-sisyphos.yml workflow will have the latest release binaries
# Therefore we don't need to provide a commit.
- name: Download latest release binaries for main/PR branches.
if: env.IS_RELEASE_BRANCH == 'false'
uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d
with:
workflow: release-sisyphos.yml
name: chainflip-backend-bin
github_token: ${{ secrets.CF_BACKEND_GITHUB_TOKEN }}
path: latest-release
# See: engine-runner-bin/Cargo.toml for more information
- name: Move latest release dylib into the target/release ready to be packaged by cargo-deb.
run: |
mv latest-release/*.so target/release/
- name: Get date
id: get-date
run: |
echo "date=$(date +'%Y%m%d%H%M')" >> $GITHUB_OUTPUT
- name: Build global packages 🌍
run: |
cargo deb -v --no-build --no-strip -p chainflip-node --deb-revision "${{ steps.get-date.outputs.date }}" --variant=${{ inputs.network }}
cargo deb -v --no-build --no-strip -p engine-runner --deb-revision "${{ steps.get-date.outputs.date }}" --variant=${{ inputs.network }}
cargo deb -v --no-build --no-strip -p chainflip-cli --deb-revision "${{ steps.get-date.outputs.date }}"
cargo deb -v --no-build --no-strip -p chainflip-broker-api --deb-revision "${{ steps.get-date.outputs.date }}"
cargo deb -v --no-build --no-strip -p chainflip-lp-api --deb-revision "${{ steps.get-date.outputs.date }}"
- name: Upload packages 📤
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32
with:
name: chainflip-backend-packages
path: |
target/debian/*.deb