Skip to content

Commit 0375e4b

Browse files
authored
Merge pull request #1122 from github/3.8.3-patch
3.8.3 patch
2 parents f1ca176 + 7577114 commit 0375e4b

File tree

14 files changed

+286
-13
lines changed

14 files changed

+286
-13
lines changed

.github/linters/.yaml-lint.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
---
2+
###########################################
3+
# These are the rules used for #
4+
# linting all the yaml files in the stack #
5+
# NOTE: #
6+
# You can disable line with: #
7+
# # yamllint disable-line #
8+
###########################################
9+
rules:
10+
braces:
11+
level: warning
12+
min-spaces-inside: 0
13+
max-spaces-inside: 0
14+
min-spaces-inside-empty: 1
15+
max-spaces-inside-empty: 5
16+
brackets:
17+
level: warning
18+
min-spaces-inside: 0
19+
max-spaces-inside: 0
20+
min-spaces-inside-empty: 1
21+
max-spaces-inside-empty: 5
22+
colons:
23+
level: warning
24+
max-spaces-before: 0
25+
max-spaces-after: 1
26+
commas:
27+
level: warning
28+
max-spaces-before: 0
29+
min-spaces-after: 1
30+
max-spaces-after: 1
31+
comments: disable
32+
comments-indentation: disable
33+
document-end: disable
34+
document-start: disable
35+
empty-lines:
36+
level: warning
37+
max: 2
38+
max-start: 0
39+
max-end: 0
40+
hyphens:
41+
level: warning
42+
max-spaces-after: 1
43+
indentation:
44+
level: warning
45+
spaces: consistent
46+
indent-sequences: true
47+
check-multi-line-strings: false
48+
key-duplicates: enable
49+
line-length: disable
50+
new-line-at-end-of-file: disable
51+
new-lines:
52+
type: unix
53+
trailing-spaces: disable
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
---
2+
name: Build and Release
3+
4+
on:
5+
workflow_dispatch:
6+
inputs:
7+
gh-token:
8+
description: 'GitHub Token - used to create a commit in the backup-utils repo'
9+
required: true
10+
type: string
11+
version:
12+
description: 'Version - patch version of the release (e.g. x.y.z)'
13+
required: true
14+
type: string
15+
draft:
16+
description: 'Draft - true if the release should be a draft'
17+
required: true
18+
type: boolean
19+
default: true
20+
21+
jobs:
22+
build:
23+
runs-on: ubuntu-latest
24+
steps:
25+
# resulting token still gets denied by the backup-utils repo
26+
# see: https://github.com/actions/create-github-app-token/pull/46
27+
# - uses: timreimherr/create-github-app-token@main
28+
# id: app-token
29+
# with:
30+
# # required
31+
# app_id: ${{ vars.RELEASE_CONTROLLER_APP_ID }}
32+
# private_key: ${{ secrets.RELEASE_CONTROLLER_APP_PRIVATE_KEY }}
33+
# owner: ${{ github.repository_owner }}
34+
# repositories: backup-utils,backup-utils-private
35+
- name: Checkout backup-utils-private
36+
uses: actions/checkout@v4
37+
with:
38+
token: ${{ github.event.inputs.gh-token }}
39+
repository: github/backup-utils-private
40+
- name: Install dependencies
41+
run: |
42+
sudo apt-get update -y
43+
sudo apt-get install -y moreutils debhelper help2man devscripts gzip
44+
- name: Create tag # this is required for the build scripts
45+
run: |
46+
git config user.name "${{ github.actor }}"
47+
git config user.email "[email protected]"
48+
git tag -a "v${{ github.event.inputs.version }}" -m "v${{ github.event.inputs.version }}"
49+
git push origin "v${{ github.event.inputs.version }}"
50+
- name: Package deb
51+
run: |
52+
./script/package-deb
53+
# many need to remove this once release-notes compilation is automated
54+
- name: Rename deb artifact
55+
run: |
56+
for file in dist/github-backup-utils_*_all.deb; do
57+
if [[ -f "$file" ]]; then
58+
mv "$file" "dist/github-backup-utils_${{ github.event.inputs.version }}_all.deb"
59+
fi
60+
done
61+
- name: Upload deb artifact
62+
uses: actions/upload-artifact@v3
63+
with:
64+
name: github-backup-utils_${{ github.event.inputs.version }}_all.deb
65+
path: |
66+
dist/github-backup-utils_${{ github.event.inputs.version }}_all.deb
67+
- name: Package tarball
68+
run: |
69+
./script/package-tarball
70+
- name: Upload tarball artifact
71+
uses: actions/upload-artifact@v3
72+
with:
73+
name: github-backup-utils-v${{ github.event.inputs.version }}.tar.gz
74+
path: |
75+
dist/github-backup-utils-v${{ github.event.inputs.version }}.tar.gz
76+
release:
77+
needs: build
78+
runs-on: ubuntu-latest
79+
outputs:
80+
commit_hash: ${{ steps.empty-commit.outputs.commit_hash }}
81+
steps:
82+
# resulting token still gets denied by the backup-utils repo
83+
# see: https://github.com/actions/create-github-app-token/pull/46
84+
# - uses: timreimherr/create-github-app-token@main
85+
# id: app-token
86+
# with:
87+
# app_id: ${{ vars.RELEASE_CONTROLLER_APP_ID }}
88+
# private_key: ${{ secrets.RELEASE_CONTROLLER_APP_PRIVATE_KEY }}
89+
# owner: ${{ github.repository_owner }}
90+
# repositories: backup-utils,backup-utils-private
91+
- name: Checkout backup-utils
92+
uses: actions/checkout@v4
93+
with:
94+
token: ${{ github.event.inputs.gh-token }}
95+
repository: github/backup-utils
96+
ref: master
97+
- name: Create empty commit
98+
uses: stefanzweifel/git-auto-commit-action@v4
99+
id: empty-commit
100+
with:
101+
branch: master
102+
commit_message: "${{ github.event.inputs.version }} release"
103+
commit_user_name: "${{ github.actor }}"
104+
commit_user_email: "[email protected]"
105+
commit_options: "--allow-empty"
106+
skip_dirty_check: true
107+
- name: Checkout backup-utils
108+
uses: actions/checkout@v4
109+
with:
110+
token: ${{ github.event.inputs.gh-token }}
111+
repository: github/backup-utils-private
112+
- name: Download deb artifact
113+
uses: actions/download-artifact@v3
114+
with:
115+
name: github-backup-utils_${{ github.event.inputs.version }}_all.deb
116+
- name: Download tarball artifact
117+
uses: actions/download-artifact@v3
118+
with:
119+
name: github-backup-utils-v${{ github.event.inputs.version }}.tar.gz
120+
- name: Create Release
121+
uses: ncipollo/release-action@v1
122+
with:
123+
token: ${{ github.event.inputs.gh-token }}
124+
repo: backup-utils
125+
name: |
126+
GitHub Enterprise Server Backup Utilities v${{ github.event.inputs.version }}
127+
artifacts: |
128+
github-backup-utils-v${{ github.event.inputs.version }}.tar.gz, \
129+
github-backup-utils_${{ github.event.inputs.version }}_all.deb
130+
tag: v${{ github.event.inputs.version }}
131+
commit: ${{ steps.empty-commit.outputs.commit_hash }}
132+
bodyFile: release-notes/${{ github.event.inputs.version }}.md
133+
draft: ${{ github.event.inputs.draft }}
134+
allowUpdates: true
135+
artifactContentType: "raw"
136+
137+
138+
139+

.github/workflows/lint.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
---
12
name: Lint Code Base
23

34
on:
@@ -21,3 +22,4 @@ jobs:
2122
env:
2223
VALIDATE_ALL_CODEBASE: false
2324
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
25+
FILTER_REGEX_EXCLUDE: .*release-notes/.*

.releaseignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ownership.yaml
2+
.github

bin/ghe-host-check

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,19 @@ if ghe-ssh "$host" -- \
9191
CLUSTER=true
9292
fi
9393

94-
# ensure all nodes in the cluster are running the same version
94+
# ensure all nodes in the cluster are online/reachable and running the same version
9595
if "$CLUSTER"; then
96+
online_status=$(ghe-ssh "$host" ghe-cluster-host-check)
97+
if [ "$online_status" != "Cluster is ready to configure." ]; then
98+
echo "Error: Not all nodes are online! Please ensure cluster is in a healthy state before using backup-utils." 1>&2
99+
exit 1
100+
fi
101+
96102
node_version_list=$(ghe-ssh "$host" ghe-cluster-each -- ghe-version)
97103
distinct_versions=$(echo "$node_version_list" | awk '{split($0, a, ":"); print a[2]}' | awk '{print $4}' | uniq | wc -l)
98104
if [ "$distinct_versions" -ne 1 ]; then
99-
echo "$node_version_list" 1>&2
100-
echo "Error: Not all nodes are running the same version! Please ensure all nodes are running the same version before using backup-utils." 1>&3
105+
echo "Version mismatch: $node_version_list" 1>&2
106+
echo "Error: Not all nodes are running the same version! Please ensure all nodes are running the same version before using backup-utils." 1>&2
101107
exit 1
102108
fi
103109
fi

docs/requirements.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ storage and must have network connectivity with the GitHub Enterprise Server app
55

66
## Backup host requirements
77

8-
Backup host software requirements are modest: Linux or other modern Unix operating
9-
system (Ubuntu is highly recommended) with [bash][1], [git][2], [OpenSSH][3] 5.6 or newer, [rsync][4] v2.6.4 or newer, and [jq][11] v1.5 or newer.
8+
Backup host software requirements are modest: Linux or other modern Unix operating system (Ubuntu is highly recommended) with [bash][1], [git][2], [OpenSSH][3] 5.6 or newer, [rsync][4] v2.6.4 or newer* (see [below](#april-2023-update-of-rsync-requirements) for exceptions), [jq][11] v1.5 or newer, and [bc][12] v1.07 or newer.
109

1110
The parallel backup and restore feature will require [GNU awk][10] and [moreutils][9] to be installed.
1211

@@ -79,3 +78,4 @@ Due to how some components of Backup Utilities (e.g. MSSQL) take incremental bac
7978
[9]: https://joeyh.name/code/moreutils
8079
[10]: https://www.gnu.org/software/gawk
8180
[11]: https://stedolan.github.io/jq/
81+
[12]: https://www.gnu.org/software/bc/

script/package-deb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ set -e
88
# Change into project root
99
cd "$(dirname "$0")"/..
1010

11+
# Fetch tags from remote repository
12+
git fetch --tags
13+
1114
# Basic package name and version.
1215
PKG_BASE="github-backup-utils"
1316
PKG_VERS="$(git describe --tags)"
@@ -22,6 +25,14 @@ mkdir -p dist/debuild
2225
distdir="$(pwd)/dist/debuild/$PKG_NAME"
2326
git clone -q . "$distdir"
2427
cd "$distdir"
28+
29+
echo "Removing files listed in .releaseignore ..."
30+
while IFS= read -r line; do
31+
rm -rf "$line"
32+
done < .releaseignore
33+
34+
echo "Removing .releaseignore ..."
35+
rm -f .releaseignore
2536
git checkout -q "$PKG_HEAD"
2637

2738
debuild -uc -us 1>&2

script/package-tarball

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,24 @@ set -e
88
# Change into project root
99
cd "$(dirname "$0")"/..
1010

11+
# Fetch tags from remote repository
12+
git fetch --tags
13+
1114
# Basic package name and version.
1215
PKG_BASE="github-backup-utils"
1316
PKG_VERS="$(git describe --tags)"
1417
PKG_NAME="${PKG_BASE}-${PKG_VERS}"
1518

19+
# Remove all files or directories listed in .releaseignore
20+
echo "Removing files listed in .releaseignore ..."
21+
while IFS= read -r line; do
22+
rm -rf "$line"
23+
done < .releaseignore
24+
25+
# Remove the .releaseignore file itself
26+
echo "Removing .releaseignore ..."
27+
rm -f .releaseignore
28+
1629
# Run git-archive to generate tarball
1730
echo "Creating ${PKG_NAME}.tar.gz ..."
1831
mkdir -p dist

share/github-backup-utils/ghe-backup-config

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,10 @@ ghe_parallel_check() {
207207
GHE_PARALLEL_COMMAND="parallel"
208208
local x
209209
for x in \
210+
/usr/bin/parallel-moreutils \
210211
/usr/bin/parallel.moreutils \
211212
/usr/bin/parallel_moreutils \
213+
/usr/bin/moreutils-parallel \
212214
/usr/bin/moreutils.parallel \
213215
/usr/bin/moreutils_parallel \
214216
; do

share/github-backup-utils/ghe-backup-settings

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,13 @@ if [ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 3.7.0)" ]; then
8686
cat "$GHE_SNAPSHOT_DIR/encrypted-column-encryption-keying-material" | sed 's:.*;::' > "$GHE_SNAPSHOT_DIR/encrypted-column-current-encryption-key"
8787
fi
8888

89-
backup-secret "secret scanning encrypted secrets current storage key" "secret-scanning-encrypted-secrets-current-storage-key" "secrets.secret-scanning.encrypted-secrets-current-storage-key"
90-
backup-secret "secret scanning encrypted secrets delimited storage keys" "secret-scanning-encrypted-secrets-delimited-storage-keys" "secrets.secret-scanning.encrypted-secrets-delimited-storage-keys"
91-
backup-secret "secret scanning encrypted secrets current shared transit key" "secret-scanning-encrypted-secrets-current-shared-transit-key" "secrets.secret-scanning.encrypted-secrets-current-shared-transit-key"
92-
backup-secret "secret scanning encrypted secrets delimited shared transit keys" "secret-scanning-encrypted-secrets-delimited-shared-transit-keys" "secrets.secret-scanning.encrypted-secrets-delimited-shared-transit-keys"
89+
# secret scanning encrypted secrets keys were added in GHES 3.8.0
90+
if [ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 3.8.0)" ]; then
91+
backup-secret "secret scanning encrypted secrets current storage key" "secret-scanning-encrypted-secrets-current-storage-key" "secrets.secret-scanning.encrypted-secrets-current-storage-key"
92+
backup-secret "secret scanning encrypted secrets delimited storage keys" "secret-scanning-encrypted-secrets-delimited-storage-keys" "secrets.secret-scanning.encrypted-secrets-delimited-storage-keys"
93+
backup-secret "secret scanning encrypted secrets current shared transit key" "secret-scanning-encrypted-secrets-current-shared-transit-key" "secrets.secret-scanning.encrypted-secrets-current-shared-transit-key"
94+
backup-secret "secret scanning encrypted secrets delimited shared transit keys" "secret-scanning-encrypted-secrets-delimited-shared-transit-keys" "secrets.secret-scanning.encrypted-secrets-delimited-shared-transit-keys"
95+
fi
9396

9497
# Backup argon secrets for multiuser from ghes version 3.8 onwards
9598
if [ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 3.8.0)" ]; then

0 commit comments

Comments
 (0)