Merge pull request #2066 from gravitl/GRA-1100-workflows

Gra 1100 workflows
This commit is contained in:
dcarns 2023-02-28 09:56:05 -05:00 committed by GitHub
commit d7f6030173
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 314 additions and 87 deletions

View file

@ -1,50 +0,0 @@
name: Build and Release
on:
workflow_dispatch:
inputs:
version:
description: 'Netmaker version'
required: true
release:
types: [published]
jobs:
version:
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.version.outputs.package_version }}
version: ${{ steps.version.outputs.version }}
steps:
- name: Get Version Number
id: version
run: |
if [[ -n "${{ github.event.inputs.version }}" ]]; then
NETMAKER_VERSION=${{ github.event.inputs.version }}
else
NETMAKER_VERSION=$(curl -fsSL https://api.github.com/repos/gravitl/netmaker/tags | grep 'name' | head -1 | cut -d'"' -f4)
fi
echo "VERSION=${NETMAKER_VERSION}" >> $GITHUB_OUTPUT
# remove everything but digits and . for package (deb, rpm, etc) versions
PACKAGE_VERSION=$(echo ${NETMAKER_VERSION} | tr -cd '[:digit:].')
echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_OUTPUT
netmaker-nmctl:
runs-on: ubuntu-latest
needs: version
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: release_${{ needs.version.outputs.version }}
fetch-depth: 0
- run: git fetch --force --tags
- name: Setup go
uses: actions/setup-go@v3
with:
go-version: 1.19
- name: GoReleaser
uses: goreleaser/goreleaser-action@v4
with:
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

46
.github/workflows/packages.yml vendored Normal file
View file

@ -0,0 +1,46 @@
name: Build linux packages
on:
workflow_call:
inputs:
version:
required: true
type: string
workflow_dispatch:
inputs:
version:
description: "netmaker version"
required: true
release:
types: [released]
jobs:
packages:
runs-on: ubuntu-latest
steps:
- name: setup ssh
run: |
mkdir -p ~/.ssh/
echo "$SSH_KEY" > ~/.ssh/id_devops
chmod 600 ~/.ssh/id_devops
cat >>~/.ssh/config <<END
Host *.clustercat.com
User root
IdentityFile ~/.ssh/id_devops
StrictHostKeyChecking no
END
env:
SSH_KEY: ${{ secrets.TESTING_SSH_KEY }}
- name: set version
run: |
if [[ -n "${{ github.event.inputs.version }}" ]]; then
# remove everything but digits and . for package (deb, rpm, etc) versions
VERSION=$(echo ${{ github.event.inputs.version }} | tr -cd '[:digit:].')
else
VERSION=$(echo ${{ github.ref.name }} | tr -cd '[:digit:].')
fi
echo "VERSION=${VERSION}" >> $GITHUB_ENV
echo ${VERSION}
- name: apt/rpm
run: |
ssh fileserver.clustercat.com "cd packages/nmcli; export VERSION=${{ ENV.version }}; export REVISION=0; ./buildall.sh "

View file

@ -6,8 +6,11 @@ on:
tag:
description: 'docker tag'
required: true
release:
types: [published]
workflow_call:
inputs:
tag:
type: string
required: true
jobs:
docker:

32
.github/workflows/pull-request.yml vendored Normal file
View file

@ -0,0 +1,32 @@
# creates a PR from release branch to master
name: Create Release PR to master
on:
workflow_call:
inputs:
version:
required: true
type: string
workflow_dispatch:
inputs:
version:
description: "netmaker version"
required: true
release:
types: [released]
jobs:
pr-to-main:
runs-on: ubuntu-latest
steps:
- name: create pr
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh api --method POST \
-H 'Accept: application/vnd.github+json' -H 'X-GitHub-Api-Version: 2022-11-28' \
/repos/${{ github.repository }}/pulls \
-f title='${{ github.event.inputs.version }}' \
-f head='release_${{ github.event.inputs.version }}' \
-f base="master"

View file

@ -1,29 +0,0 @@
name: Purge untagged images from GHCR
on:
workflow_dispatch:
schedule:
- cron: '1 1 1 * *'
jobs:
purge:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Prune Netmaker
uses: vlaurin/action-ghcr-prune@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
organization: gravitl
container: netmaker
dry-run: false # Dry-run first, then change to `false`
untagged: true
- name: Prune Netclient
uses: vlaurin/action-ghcr-prune@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
organization: gravitl
container: netclient
dry-run: false # Dry-run first, then change to `false`
untagged: true

50
.github/workflows/release-assets.yml vendored Normal file
View file

@ -0,0 +1,50 @@
# generates release assets and uploads to release
name: Upload Release Assets
on:
workflow_call:
inputs:
version:
required: true
type: string
prerelease:
required: true
type: boolean
workflow_dispatch:
inputs:
version:
description: "netmaker version"
required: true
prerelease:
required: true
type: boolean
description: "prerelease"
jobs:
release-assets:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: release_${{ github.event.inputs.version}}
fetch-depth: 0
- name: Get Tags
run: |
git fetch --force --tags
- name: Setup go
uses: actions/setup-go@v3
with:
go-version: 1.19
- name: GoReleaser (full release)
if: ${{ github.event.inputs.prerelease == 'false'}}
uses: goreleaser/goreleaser-action@v4
with:
args: release --clean --release-notes release.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: GoReleaser (prerelease)
if: ${{ github.event.inputs.prerelease == 'false'}}
uses: goreleaser/goreleaser-action@v4
with:
args: release --clean --release-notes release.md -f .goreleaser.prerelease.yaml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

39
.github/workflows/release-branch.yml vendored Normal file
View file

@ -0,0 +1,39 @@
# creates new branch (release_{{ version }} with tag {{ version }} from develop
# will fail if branch or tag already exists on github
name: Create Release Branch
on:
workflow_call:
inputs:
version:
required: true
type: string
workflow_dispatch:
inputs:
version:
description: "netmaker version"
required: true
jobs:
release-branch:
runs-on: ubuntu-latest
steps:
- name: checkout develop
uses: actions/checkout@v3
with:
ref: develop
- name: setup go
uses: actions/setup-go@v3
with:
go-version: 1.19
- name: setup git
run: |
git config user.name "Github Actions"
git config user.emaail "info@netmaker.io"
- name: create release Branch
run: |
git switch -c release_${{ github.event.inputs.version }}
git tag -f ${{ github.event.inputs.version }}
#push branch
git push origin release_${{ github.event.inputs.version }}
#push tag
git push origin ${{ github.event.inputs.version }}

49
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,49 @@
# creates a release from develop
# creates release branch, generates release assets, publishes docker image and copies release.md to release
# if formal release, linux packages are generated and a PR from release branch to master is created
name: Release
on:
workflow_dispatch:
inputs:
version:
description: "new version number"
required: true
prerelease:
required: true
type: boolean
description: Is this a pre-release
jobs:
release-branch:
uses: ./.github/workflows/release-branch.yml
with:
version: ${{ github.event.inputs.version }}
release-assets:
needs: release-branch
uses: ./.github/workflows/release-assets.yml
with:
version: ${{ github.event.inputs.version }}
prerelease: ${{ github.event.inputs.prerelease == 'true' }}
docker:
needs: release-branch
uses: ./.github/workflows/publish-docker.yml
with:
tag: ${{ github.event.inputs.version }}
packages:
if: ${{ github.event.inputs.prerelease == 'false' }}
needs: release-branch
uses: ./.github/workflows/packages.yml
with:
version: ${{ github.event.inputs.version }}
pull-request:
if: ${{ github.event.inputs.prerelease == 'false' }}
needs: release-branch
uses: ./.github/workflows/pull-request.yml
with:
version: ${{ github.event.inputs.version }}

41
.github/workflows/upgraderelease.yml vendored Normal file
View file

@ -0,0 +1,41 @@
name: UpgradeRelease
on:
workflow_dispatch:
inputs:
version:
description: "release/version to update"
required: true
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v3
with:
ref: release_${{ github.event.inputs.version }}
fetch-depth: 0
- run: |
git fetch --force --tags
- name: Setup go
uses: actions/setup-go@v3
with:
go-version: 1.19
- name: goreleaser
uses: goreleaser/goreleaser-action@v4
with:
args: release --clean --release-notes release.md -f .goreleaser.update.yaml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
packages:
uses: ./.github/workflows/packages.yml
with:
version: ${{ github.event.inputs.version }}
pull-request:
uses: ./.github/workflows/pull-request.yml
with:
version: ${{ github.event.inputs.version }}

View file

@ -0,0 +1,34 @@
before:
hooks:
# You may remove this if you don't use go modules.
- go mod tidy
builds:
- main: ./
env:
- CGO_ENABLED=1
ldflags:
- -s -w
targets:
- linux_amd64
binary: '{{ .ProjectName }}'
- main: ./cli
id: 'nmctl'
env:
- CGO_ENABLED=0
ldflags:
- -s -w
targets:
- linux_amd64
- linux_arm64
- darwin_amd64
- darwin_arm64
- freebsd_amd64
- windows_amd64
binary: 'nmctl'
archives:
- format: binary
name_template: '{{ .Binary }}_{{ .Os }}_{{ .Arch }}{{ with .Arm }}v{{ . }}{{ end }}{{ with .Mips }}_{{ . }}{{ end }}'
release:
prerelease: true

4
.goreleaser.update.yaml Normal file
View file

@ -0,0 +1,4 @@
builds:
- skip: true
release:
prerelease: false

View file

@ -4,16 +4,16 @@ before:
- go mod tidy
builds:
- main: ./
id: "netmaker"
env:
- CGO_ENABLED=1
ldflags:
- -s -w
targets:
- linux_amd64
binary: netmaker
binary: '{{ .ProjectName }}'
- main: ./cli
id: "nmctl"
id: 'nmctl'
env:
- CGO_ENABLED=0
ldflags:
@ -25,9 +25,10 @@ builds:
- darwin_arm64
- freebsd_amd64
- windows_amd64
binary: nmctl
binary: 'nmctl'
archives:
- format: binary
name_template: '{{ .Binary }}_{{ .Os }}_{{ .Arch }}{{ with .Arm }}v{{ . }}{{ end }}{{ with .Mips }}_{{ . }}{{ end }}'
changelog:
skip: true
release:
prerelease: false

7
release.md Normal file
View file

@ -0,0 +1,7 @@
# Netmaker v0.18.1
## whats new
## whats fixed
## known issues