mirror of
https://github.com/go-shiori/shiori.git
synced 2024-09-20 06:56:10 +08:00
Setup new CI/CD workflows (#365)
* CI/CD setup * Setup for go-shiori * Fix docker image * Dockerfile adjustments
This commit is contained in:
parent
a76b121098
commit
d05d1ad2c0
6
.dockerignore
Normal file
6
.dockerignore
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
docs
|
||||||
|
Dockerfile
|
||||||
|
*.md
|
||||||
|
.githooks
|
||||||
|
.github
|
||||||
|
.goreleaser.yaml
|
38
.github/workflows/_buildx.yml
vendored
Normal file
38
.github/workflows/_buildx.yml
vendored
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
name: 'Build Docker'
|
||||||
|
|
||||||
|
on: workflow_call
|
||||||
|
jobs:
|
||||||
|
buildx:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
name: Build Docker
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: dist
|
||||||
|
- name: Prep binaries
|
||||||
|
working-directory: .github/workflows/docker
|
||||||
|
run: |
|
||||||
|
mkdir binaries
|
||||||
|
cp -r ../../../shiori_linux_* binaries/
|
||||||
|
mv binaries/shiori_linux_arm_7 binaries/shiori_linux_arm
|
||||||
|
gzip -d -S binaries/.gz__ -r .
|
||||||
|
chmod 755 binaries/shiori_linux_*/shiori
|
||||||
|
- name: Buildx
|
||||||
|
working-directory: .github/workflows/docker
|
||||||
|
run: |
|
||||||
|
echo ${{ secrets.GITHUB_TOKEN }} | docker login -u go-shiori --password-stdin ghcr.io
|
||||||
|
REPO=ghcr.io/go-shiori/shiori
|
||||||
|
TAG=$(git describe --tags)
|
||||||
|
if [ -z "$(git tag --points-at HEAD)" ]
|
||||||
|
then
|
||||||
|
TAG2="dev"
|
||||||
|
else
|
||||||
|
TAG2="latest"
|
||||||
|
fi
|
||||||
|
docker buildx create --use --name builder
|
||||||
|
docker buildx build -f Dockerfile.ci --platform=linux/amd64,arm64,linux/arm/v7 --push --output=type=registry --tag $REPO:$TAG --tag $REPO:$TAG2 .
|
34
.github/workflows/_golangci-lint.yml
vendored
Normal file
34
.github/workflows/_golangci-lint.yml
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
name: 'golangci-lint'
|
||||||
|
|
||||||
|
on: workflow_call
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
jobs:
|
||||||
|
golangci:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: golangci-lint
|
||||||
|
uses: golangci/golangci-lint-action@v2
|
||||||
|
with:
|
||||||
|
version: latest
|
||||||
|
|
||||||
|
# Optional: working directory, useful for monorepos
|
||||||
|
# working-directory: somedir
|
||||||
|
|
||||||
|
# Optional: golangci-lint command line arguments.
|
||||||
|
# args: --issues-exit-code=0
|
||||||
|
|
||||||
|
# Optional: show only new issues if it's a pull request. The default value is `false`.
|
||||||
|
only-new-issues: true
|
||||||
|
|
||||||
|
# Optional: if set to true then the action will use pre-installed Go.
|
||||||
|
# skip-go-installation: true
|
||||||
|
|
||||||
|
# Optional: if set to true then the action don't cache or restore ~/go/pkg.
|
||||||
|
# skip-pkg-cache: true
|
||||||
|
|
||||||
|
# Optional: if set to true then the action don't cache or restore ~/.cache/go-build.
|
||||||
|
# skip-build-cache: true
|
31
.github/workflows/_gorelease.yml
vendored
Normal file
31
.github/workflows/_gorelease.yml
vendored
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
name: 'Goreleaser'
|
||||||
|
|
||||||
|
on: workflow_call
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
goreleaser:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: 1.17
|
||||||
|
- name: Run GoReleaser
|
||||||
|
uses: goreleaser/goreleaser-action@v2
|
||||||
|
with:
|
||||||
|
distribution: goreleaser
|
||||||
|
version: latest
|
||||||
|
args: release --rm-dist
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: dist
|
||||||
|
path: ./dist/*
|
28
.github/workflows/_test.yml
vendored
Normal file
28
.github/workflows/_test.yml
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
name: 'Unit Tests'
|
||||||
|
|
||||||
|
on: workflow_call
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go: [1.17]
|
||||||
|
name: Go ${{ matrix.go }} unit tests
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Setup go
|
||||||
|
uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go }}
|
||||||
|
- uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cache/go-build
|
||||||
|
~/go/pkg
|
||||||
|
key: golangci-lint.cache-{platform-arch}-{interval_number}-{go.mod_hash}
|
||||||
|
restore-keys: |
|
||||||
|
golangci-lint.cache-{interval_number}-
|
||||||
|
golangci-lint.cache-
|
||||||
|
- run: go test ./...
|
||||||
|
- run: CGO_ENABLED=0 go build -tags osusergo,netgo -ldflags="-s -w -X main.version=$(git describe --tags) -X main.date=$(date --iso-8601=seconds)"
|
55
.github/workflows/continuous-integration.yml
vendored
55
.github/workflows/continuous-integration.yml
vendored
|
@ -1,55 +0,0 @@
|
||||||
name: CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint:
|
|
||||||
name: Lint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Install Go
|
|
||||||
uses: actions/setup-go@v2
|
|
||||||
with:
|
|
||||||
go-version: 1.17.x
|
|
||||||
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Install golint
|
|
||||||
run: go get golang.org/x/lint/golint
|
|
||||||
|
|
||||||
- name: Lint Go source code
|
|
||||||
run: golint -set_exit_status ./...
|
|
||||||
|
|
||||||
test:
|
|
||||||
name: Unit tests
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
go-version: [1.17.x]
|
|
||||||
platform: [ubuntu-latest, macos-latest, windows-latest]
|
|
||||||
runs-on: ${{ matrix.platform }}
|
|
||||||
steps:
|
|
||||||
- name: Install Go
|
|
||||||
uses: actions/setup-go@v2
|
|
||||||
with:
|
|
||||||
go-version: ${{ matrix.go-version }}
|
|
||||||
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Fetch dependencies
|
|
||||||
run: |
|
|
||||||
go get -v -t -d ./...
|
|
||||||
|
|
||||||
- name: Run unit tests
|
|
||||||
run: go test ./...
|
|
||||||
|
|
||||||
# - name: Codecov
|
|
||||||
# if: ${{ matrix.go-version == '1.14.x' && matrix.platform == 'ubuntu-latest' }}
|
|
||||||
# uses: codecov/codecov-action@v1
|
|
||||||
# with:
|
|
||||||
# file: coverage.out
|
|
11
.github/workflows/docker/Dockerfile.ci
vendored
Normal file
11
.github/workflows/docker/Dockerfile.ci
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
FROM ghcr.io/ghcri/alpine:3.15
|
||||||
|
ARG TARGETARCH
|
||||||
|
LABEL org.opencontainers.image.source https://github.com/go-shiori/shiori
|
||||||
|
COPY etc /etc
|
||||||
|
COPY binaries/shiori_linux_$TARGETARCH/shiori /usr/bin/shiori
|
||||||
|
USER shiori
|
||||||
|
WORKDIR /shiori
|
||||||
|
EXPOSE 8080
|
||||||
|
ENV SHIORI_DIR=/shiori
|
||||||
|
ENTRYPOINT ["/usr/bin/shiori"]
|
||||||
|
CMD ["serve"]
|
2
.github/workflows/docker/etc/group
vendored
Normal file
2
.github/workflows/docker/etc/group
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
root:x:0:root
|
||||||
|
shiori:x:1000:shiori
|
2
.github/workflows/docker/etc/passwd
vendored
Normal file
2
.github/workflows/docker/etc/passwd
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
root:x:0:0::/root:/bin/ash
|
||||||
|
shiori:x:1000:1000::/shiori:/bin/ash
|
15
.github/workflows/pull_request.yml
vendored
Normal file
15
.github/workflows/pull_request.yml
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
name: 'Pull Request'
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: master
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ci-tests-${{ github.ref }}-1
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
call-lint:
|
||||||
|
uses: ./.github/workflows/_golangci-lint.yml
|
||||||
|
call-test:
|
||||||
|
uses: ./.github/workflows/_test.yml
|
21
.github/workflows/push.yml
vendored
Normal file
21
.github/workflows/push.yml
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
name: 'Push'
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: master
|
||||||
|
tags: v*
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ci-tests-${{ github.ref }}-1
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
call-lint:
|
||||||
|
uses: ./.github/workflows/_golangci-lint.yml
|
||||||
|
call-test:
|
||||||
|
uses: ./.github/workflows/_test.yml
|
||||||
|
call-gorelease:
|
||||||
|
uses: ./.github/workflows/_gorelease.yml
|
||||||
|
call-buildx:
|
||||||
|
needs: call-gorelease
|
||||||
|
uses: ./.github/workflows/_buildx.yml
|
33
.github/workflows/version_bump.yml
vendored
Normal file
33
.github/workflows/version_bump.yml
vendored
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
name: 'Tag release'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: 'Version to bump to, example: v1.5.2'
|
||||||
|
required: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tag-release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
ref: master
|
||||||
|
- name: Tag release
|
||||||
|
run: |
|
||||||
|
git config user.email "go-shiori@users.noreply.github.com"
|
||||||
|
git config user.name "shiori"
|
||||||
|
git tag -a ${{ github.event.inputs.version }} -m "tag release ${{ github.event.inputs.version }}"
|
||||||
|
git push --follow-tags
|
||||||
|
call-gorelease:
|
||||||
|
needs: tag-release
|
||||||
|
uses: ./.github/workflows/_gorelease.yml
|
||||||
|
call-buildx:
|
||||||
|
needs: call-gorelease
|
||||||
|
uses: ./.github/workflows/_buildx.yml
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -10,3 +10,5 @@
|
||||||
|
|
||||||
# Coverage data
|
# Coverage data
|
||||||
/coverage.out
|
/coverage.out
|
||||||
|
|
||||||
|
dist/
|
||||||
|
|
48
.goreleaser.yaml
Normal file
48
.goreleaser.yaml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
before:
|
||||||
|
hooks:
|
||||||
|
- go mod tidy
|
||||||
|
builds:
|
||||||
|
- binary: shiori
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
tags:
|
||||||
|
- netgo
|
||||||
|
- osusergo
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
- windows
|
||||||
|
- darwin
|
||||||
|
goarch:
|
||||||
|
- amd64
|
||||||
|
- arm
|
||||||
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- 7
|
||||||
|
ignore:
|
||||||
|
- goos: darwin
|
||||||
|
goarch: arm
|
||||||
|
- goos: windows
|
||||||
|
goarch: arm
|
||||||
|
- goos: windows
|
||||||
|
goarch: arm64
|
||||||
|
archives:
|
||||||
|
- replacements:
|
||||||
|
darwin: Darwin
|
||||||
|
linux: Linux
|
||||||
|
windows: Windows
|
||||||
|
amd64: x86_64
|
||||||
|
arm64: aarch64
|
||||||
|
|
||||||
|
checksum:
|
||||||
|
name_template: 'checksums.txt'
|
||||||
|
snapshot:
|
||||||
|
name_template: "{{ incpatch .Version }}-next"
|
||||||
|
changelog:
|
||||||
|
sort: asc
|
||||||
|
filters:
|
||||||
|
exclude:
|
||||||
|
- '^docs:'
|
||||||
|
- '^test:'
|
||||||
|
|
||||||
|
release:
|
||||||
|
prerelease: auto
|
16
Dockerfile
16
Dockerfile
|
@ -1,15 +1,19 @@
|
||||||
# build stage
|
# build stage
|
||||||
FROM ghcr.io/ghcri/golang:1.17-alpine3.15 AS builder
|
FROM ghcr.io/ghcri/golang:1.17-alpine3.15 AS builder
|
||||||
RUN apk add --no-cache build-base
|
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN go build
|
RUN go build -ldflags '-s -w'
|
||||||
|
|
||||||
# server image
|
# server image
|
||||||
LABEL org.opencontainers.image.source https://github.com/go-shiori/shiori
|
|
||||||
FROM ghcr.io/ghcri/alpine:3.15
|
FROM ghcr.io/ghcri/alpine:3.15
|
||||||
COPY --from=builder /src/shiori /usr/local/bin/
|
LABEL org.opencontainers.image.source https://github.com/go-shiori/shiori
|
||||||
ENV SHIORI_DIR /srv/shiori/
|
COPY --from=builder /src/shiori /usr/bin/
|
||||||
|
RUN addgroup -g 1000 shiori \
|
||||||
|
&& adduser -D -h /shiori -g '' -G shiori -u 1000 shiori
|
||||||
|
USER shiori
|
||||||
|
WORKDIR /shiori
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
ENTRYPOINT ["/usr/local/bin/shiori"]
|
ENV SHIORI_DIR /shiori/
|
||||||
|
ENTRYPOINT ["/usr/bin/shiori"]
|
||||||
CMD ["serve"]
|
CMD ["serve"]
|
||||||
|
|
Loading…
Reference in a new issue