Redo CI pipelines, build from GitHub Actions, closes #36
This commit is contained in:
		
							parent
							
								
									1f38a4a531
								
							
						
					
					
						commit
						670ea67052
					
				
					 7 changed files with 510 additions and 464 deletions
				
			
		
							
								
								
									
										39
									
								
								.github/workflows/build.yaml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								.github/workflows/build.yaml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | ||||||
|  | name: build | ||||||
|  | on: [push, pull_request] | ||||||
|  | jobs: | ||||||
|  |   build: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - | ||||||
|  |         name: Install Go | ||||||
|  |         uses: actions/setup-go@v2 | ||||||
|  |         with: | ||||||
|  |           go-version: '1.18.x' | ||||||
|  |       - | ||||||
|  |         name: Install node | ||||||
|  |         uses: actions/setup-node@v2 | ||||||
|  |         with: | ||||||
|  |           node-version: '16' | ||||||
|  |       - | ||||||
|  |         name: Checkout code | ||||||
|  |         uses: actions/checkout@v2 | ||||||
|  |       - | ||||||
|  |         name: Cache Go and npm modules | ||||||
|  |         uses: actions/cache@v3 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             ~/go/pkg/mod | ||||||
|  |             ~/go/bin | ||||||
|  |             ~/.npm | ||||||
|  |             web/node_modules | ||||||
|  |           key: ${{ runner.os }}-ntfy-${{ hashFiles('**/go.sum', '**/package.lock') }} | ||||||
|  |           restore-keys: ${{ runner.os }}-ntfy- | ||||||
|  |       - | ||||||
|  |         name: Install dependencies | ||||||
|  |         run: make build-deps-ubuntu | ||||||
|  |       - | ||||||
|  |         name: Build all the things | ||||||
|  |         run: make build | ||||||
|  |       - | ||||||
|  |         name: Print build results and checksums | ||||||
|  |         run: make cli-build-results | ||||||
							
								
								
									
										72
									
								
								.github/workflows/codeql-analysis.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								.github/workflows/codeql-analysis.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -1,72 +0,0 @@ | ||||||
| # For most projects, this workflow file will not need changing; you simply need |  | ||||||
| # to commit it to your repository. |  | ||||||
| # |  | ||||||
| # You may wish to alter this file to override the set of languages analyzed, |  | ||||||
| # or to provide custom queries or build logic. |  | ||||||
| # |  | ||||||
| # ******** NOTE ******** |  | ||||||
| # We have attempted to detect the languages in your repository. Please check |  | ||||||
| # the `language` matrix defined below to confirm you have the correct set of |  | ||||||
| # supported CodeQL languages. |  | ||||||
| # |  | ||||||
| name: "CodeQL" |  | ||||||
| 
 |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     branches: [ main ] |  | ||||||
|   pull_request: |  | ||||||
|     # The branches below must be a subset of the branches above |  | ||||||
|     branches: [ main ] |  | ||||||
|   schedule: |  | ||||||
|     - cron: '21 10 * * 5' |  | ||||||
| 
 |  | ||||||
| jobs: |  | ||||||
|   analyze: |  | ||||||
|     name: Analyze |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     permissions: |  | ||||||
|       actions: read |  | ||||||
|       contents: read |  | ||||||
|       security-events: write |  | ||||||
| 
 |  | ||||||
|     strategy: |  | ||||||
|       fail-fast: false |  | ||||||
|       matrix: |  | ||||||
|         language: [ 'go', 'javascript' ] |  | ||||||
|         # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] |  | ||||||
|         # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support |  | ||||||
| 
 |  | ||||||
|     steps: |  | ||||||
|     - name: Checkout repository |  | ||||||
|       uses: actions/checkout@v3 |  | ||||||
| 
 |  | ||||||
|     # Initializes the CodeQL tools for scanning. |  | ||||||
|     - name: Initialize CodeQL |  | ||||||
|       uses: github/codeql-action/init@v2 |  | ||||||
|       with: |  | ||||||
|         languages: ${{ matrix.language }} |  | ||||||
|         # If you wish to specify custom queries, you can do so here or in a config file. |  | ||||||
|         # By default, queries listed here will override any specified in a config file. |  | ||||||
|         # Prefix the list here with "+" to use these queries and those in the config file. |  | ||||||
|          |  | ||||||
|         # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs |  | ||||||
|         # queries: security-extended,security-and-quality |  | ||||||
| 
 |  | ||||||
|          |  | ||||||
|     # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java). |  | ||||||
|     # If this step fails, then you should remove it and run the build manually (see below) |  | ||||||
|     - name: Autobuild |  | ||||||
|       uses: github/codeql-action/autobuild@v2 |  | ||||||
| 
 |  | ||||||
|     # ℹ️ Command-line programs to run using the OS shell. |  | ||||||
|     # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun |  | ||||||
| 
 |  | ||||||
|     #   If the Autobuild fails above, remove it and uncomment the following three lines.  |  | ||||||
|     #   modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. |  | ||||||
| 
 |  | ||||||
|     # - run: | |  | ||||||
|     #   echo "Run, Build Application using script" |  | ||||||
|     #   ./location_of_script_within_repo/buildscript.sh |  | ||||||
| 
 |  | ||||||
|     - name: Perform CodeQL Analysis |  | ||||||
|       uses: github/codeql-action/analyze@v2 |  | ||||||
							
								
								
									
										50
									
								
								.github/workflows/release.yaml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								.github/workflows/release.yaml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | ||||||
|  | name: release | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     tags: | ||||||
|  |       - 'v[0-9]+.[0-9]+.[0-9]+' | ||||||
|  | jobs: | ||||||
|  |   release: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - | ||||||
|  |         name: Install Go | ||||||
|  |         uses: actions/setup-go@v2 | ||||||
|  |         with: | ||||||
|  |           go-version: '1.18.x' | ||||||
|  |       - | ||||||
|  |         name: Install node | ||||||
|  |         uses: actions/setup-node@v2 | ||||||
|  |         with: | ||||||
|  |           node-version: '16' | ||||||
|  |       - | ||||||
|  |         name: Checkout code | ||||||
|  |         uses: actions/checkout@v2 | ||||||
|  |       - | ||||||
|  |         name: Cache Go and npm modules | ||||||
|  |         uses: actions/cache@v3 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             ~/go/pkg/mod | ||||||
|  |             ~/go/bin | ||||||
|  |             ~/.npm | ||||||
|  |             web/node_modules | ||||||
|  |           key: ${{ runner.os }}-ntfy-${{ hashFiles('**/go.sum', '**/package.lock') }} | ||||||
|  |           restore-keys: ${{ runner.os }}-ntfy- | ||||||
|  |       - | ||||||
|  |         name: Docker login | ||||||
|  |         uses: docker/login-action@v2 | ||||||
|  |         with: | ||||||
|  |           username: ${{ github.repository_owner }} | ||||||
|  |           password: ${{ secrets.DOCKER_HUB_TOKEN }} | ||||||
|  |       - | ||||||
|  |         name: Install dependencies | ||||||
|  |         run: make build-deps-ubuntu | ||||||
|  |       - | ||||||
|  |         name: Build and publish | ||||||
|  |         run: make release | ||||||
|  |         env: | ||||||
|  |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |       - | ||||||
|  |         name: Print build results and checksums | ||||||
|  |         run: make cli-build-results | ||||||
							
								
								
									
										42
									
								
								.github/workflows/test.yaml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								.github/workflows/test.yaml
									
										
									
									
										vendored
									
									
								
							|  | @ -4,25 +4,45 @@ jobs: | ||||||
|   test: |   test: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps:  |     steps:  | ||||||
|       - name: Install Go |       - | ||||||
|  |         name: Install Go | ||||||
|         uses: actions/setup-go@v2 |         uses: actions/setup-go@v2 | ||||||
|         with: |         with: | ||||||
|           go-version: '1.17.x' |           go-version: '1.18.x' | ||||||
|       - name: Install node |       - | ||||||
|  |         name: Install node | ||||||
|         uses: actions/setup-node@v2 |         uses: actions/setup-node@v2 | ||||||
|         with: |         with: | ||||||
|           node-version: '16' |           node-version: '16' | ||||||
|       - name: Checkout code |       - | ||||||
|  |         name: Checkout code | ||||||
|         uses: actions/checkout@v2 |         uses: actions/checkout@v2 | ||||||
|       - name: Install dependencies |       - | ||||||
|         run: sudo apt update && sudo apt install -y python3-pip curl |         name: Cache Go and npm modules | ||||||
|       - name: Build docs (required for tests) |         uses: actions/cache@v3 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             ~/go/pkg/mod | ||||||
|  |             ~/go/bin | ||||||
|  |             ~/.npm | ||||||
|  |             web/node_modules | ||||||
|  |           key: ${{ runner.os }}-ntfy-${{ hashFiles('**/go.sum', '**/package.lock') }} | ||||||
|  |           restore-keys: ${{ runner.os }}-ntfy- | ||||||
|  |       - | ||||||
|  |         name: Install dependencies | ||||||
|  |         run: make build-deps-ubuntu | ||||||
|  |       - | ||||||
|  |         name: Build docs (required for tests) | ||||||
|         run: make docs |         run: make docs | ||||||
|       - name: Build web app (required for tests) |       - | ||||||
|  |         name: Build web app (required for tests) | ||||||
|         run: make web |         run: make web | ||||||
|       - name: Run tests, formatting, vetting and linting |       - | ||||||
|  |         name: Run tests, formatting, vetting and linting | ||||||
|         run: make check |         run: make check | ||||||
|       - name: Run coverage |       - | ||||||
|  |         name: Run coverage | ||||||
|         run: make coverage |         run: make coverage | ||||||
|       - name: Upload coverage to codecov.io |       - | ||||||
|  |         name: Upload coverage to codecov.io | ||||||
|         run: make coverage-upload |         run: make coverage-upload | ||||||
|  |  | ||||||
|  | @ -157,6 +157,7 @@ universal_binaries: | ||||||
|   - |   - | ||||||
|     id: ntfy_darwin_all |     id: ntfy_darwin_all | ||||||
|     replace: true |     replace: true | ||||||
|  |     name_template: ntfy | ||||||
| checksum: | checksum: | ||||||
|   name_template: 'checksums.txt' |   name_template: 'checksums.txt' | ||||||
| snapshot: | snapshot: | ||||||
|  |  | ||||||
							
								
								
									
										52
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										52
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -79,6 +79,18 @@ build: web docs cli | ||||||
| update: web-deps-update cli-deps-update docs-deps-update | update: web-deps-update cli-deps-update docs-deps-update | ||||||
| 	docker pull alpine | 	docker pull alpine | ||||||
| 
 | 
 | ||||||
|  | # Ubuntu-specific
 | ||||||
|  | 
 | ||||||
|  | build-deps-ubuntu: | ||||||
|  | 	sudo apt update | ||||||
|  | 	sudo apt install -y \
 | ||||||
|  | 		curl \
 | ||||||
|  | 		gcc-aarch64-linux-gnu \
 | ||||||
|  | 		gcc-arm-linux-gnueabi \
 | ||||||
|  | 		upx \
 | ||||||
|  | 		jq | ||||||
|  | 	which pip3 || sudo apt install -y python3-pip | ||||||
|  | 
 | ||||||
| # Documentation
 | # Documentation
 | ||||||
| 
 | 
 | ||||||
| docs: docs-deps docs-build | docs: docs-deps docs-build | ||||||
|  | @ -114,28 +126,29 @@ web-deps: | ||||||
| web-deps-update: | web-deps-update: | ||||||
| 	cd web && npm update | 	cd web && npm update | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| # Main server/client build
 | # Main server/client build
 | ||||||
| 
 | 
 | ||||||
| cli: cli-deps | cli: cli-deps | ||||||
| 	goreleaser build --snapshot --rm-dist --debug | 	goreleaser build --snapshot --rm-dist | ||||||
| 
 | 
 | ||||||
| cli-linux-amd64: cli-deps-static-sites | cli-linux-amd64: cli-deps-static-sites | ||||||
| 	goreleaser build --snapshot --rm-dist --debug --id ntfy_linux_amd64 | 	goreleaser build --snapshot --rm-dist --id ntfy_linux_amd64 | ||||||
| 
 | 
 | ||||||
| cli-linux-armv6: cli-deps-static-sites cli-deps-gcc-armv6-armv7 | cli-linux-armv6: cli-deps-static-sites cli-deps-gcc-armv6-armv7 | ||||||
| 	goreleaser build --snapshot --rm-dist --debug --id ntfy_linux_armv6 | 	goreleaser build --snapshot --rm-dist --id ntfy_linux_armv6 | ||||||
| 
 | 
 | ||||||
| cli-linux-armv7: cli-deps-static-sites cli-deps-gcc-armv6-armv7 | cli-linux-armv7: cli-deps-static-sites cli-deps-gcc-armv6-armv7 | ||||||
| 	goreleaser build --snapshot --rm-dist --debug --id ntfy_linux_armv7 | 	goreleaser build --snapshot --rm-dist --id ntfy_linux_armv7 | ||||||
| 
 | 
 | ||||||
| cli-linux-arm64: cli-deps-static-sites cli-deps-gcc-arm64 | cli-linux-arm64: cli-deps-static-sites cli-deps-gcc-arm64 | ||||||
| 	goreleaser build --snapshot --rm-dist --debug --id ntfy_linux_arm64 | 	goreleaser build --snapshot --rm-dist --id ntfy_linux_arm64 | ||||||
| 
 | 
 | ||||||
| cli-windows-amd64: cli-deps-static-sites | cli-windows-amd64: cli-deps-static-sites | ||||||
| 	goreleaser build --snapshot --rm-dist --debug --id ntfy_windows_amd64 | 	goreleaser build --snapshot --rm-dist --id ntfy_windows_amd64 | ||||||
| 
 | 
 | ||||||
| cli-darwin-all: cli-deps-static-sites | cli-darwin-all: cli-deps-static-sites | ||||||
| 	goreleaser build --snapshot --rm-dist --debug --id ntfy_darwin_all | 	goreleaser build --snapshot --rm-dist --id ntfy_darwin_all | ||||||
| 
 | 
 | ||||||
| cli-linux-server: cli-deps-static-sites | cli-linux-server: cli-deps-static-sites | ||||||
| 	# This is a target to build the CLI (including the server) manually. | 	# This is a target to build the CLI (including the server) manually. | ||||||
|  | @ -177,6 +190,7 @@ cli-deps-static-sites: | ||||||
| 
 | 
 | ||||||
| cli-deps-all: | cli-deps-all: | ||||||
| 	which upx || { echo "ERROR: upx not installed. On Ubuntu, run: apt install upx"; exit 1; } | 	which upx || { echo "ERROR: upx not installed. On Ubuntu, run: apt install upx"; exit 1; } | ||||||
|  | 	go install github.com/goreleaser/goreleaser@latest | ||||||
| 
 | 
 | ||||||
| cli-deps-gcc-armv6-armv7: | cli-deps-gcc-armv6-armv7: | ||||||
| 	which arm-linux-gnueabi-gcc || { echo "ERROR: ARMv6/ARMv7 cross compiler not installed. On Ubuntu, run: apt install gcc-arm-linux-gnueabi"; exit 1; } | 	which arm-linux-gnueabi-gcc || { echo "ERROR: ARMv6/ARMv7 cross compiler not installed. On Ubuntu, run: apt install gcc-arm-linux-gnueabi"; exit 1; } | ||||||
|  | @ -187,6 +201,18 @@ cli-deps-gcc-arm64: | ||||||
| cli-deps-update: | cli-deps-update: | ||||||
| 	go get -u | 	go get -u | ||||||
| 	go install honnef.co/go/tools/cmd/staticcheck@latest | 	go install honnef.co/go/tools/cmd/staticcheck@latest | ||||||
|  | 	go install golang.org/x/lint/golint@latest | ||||||
|  | 	go install github.com/goreleaser/goreleaser@latest | ||||||
|  | 
 | ||||||
|  | cli-build-results: | ||||||
|  | 	cat dist/config.yaml | ||||||
|  | 	[ -f dist/artifacts.json ] && cat dist/artifacts.json | jq . || true | ||||||
|  | 	[ -f dist/metadata.json ] && cat dist/metadata.json | jq . || true | ||||||
|  | 	[ -f dist/checksums.txt ] && cat dist/checksums.txt || true | ||||||
|  | 	find dist -maxdepth 2 -type f \
 | ||||||
|  | 		\( -name '*.deb' -or -name '*.rpm' -or -name '*.zip' -or -name '*.tar.gz' -or -name 'ntfy' \) \
 | ||||||
|  | 		-and -not -path 'dist/goreleaserdocker*' \
 | ||||||
|  | 		-exec sha256sum {} \; | ||||||
| 
 | 
 | ||||||
| # Test/check targets
 | # Test/check targets
 | ||||||
| 
 | 
 | ||||||
|  | @ -238,13 +264,13 @@ staticcheck: .PHONY | ||||||
| 
 | 
 | ||||||
| # Releasing targets
 | # Releasing targets
 | ||||||
| 
 | 
 | ||||||
| release: clean update cli-deps release-check-tags docs web check | release: clean update cli-deps release-checks docs web check | ||||||
| 	goreleaser release --rm-dist --debug | 	goreleaser release --rm-dist | ||||||
| 
 | 
 | ||||||
| release-snapshot: clean update cli-deps docs web check | release-snapshot: clean update cli-deps docs web check | ||||||
| 	goreleaser release --snapshot --skip-publish --rm-dist --debug | 	goreleaser release --snapshot --skip-publish --rm-dist | ||||||
| 
 | 
 | ||||||
| release-check-tags: | release-checks: | ||||||
| 	$(eval LATEST_TAG := $(shell git describe --abbrev=0 --tags | cut -c2-)) | 	$(eval LATEST_TAG := $(shell git describe --abbrev=0 --tags | cut -c2-)) | ||||||
| 	if ! grep -q $(LATEST_TAG) docs/install.md; then\
 | 	if ! grep -q $(LATEST_TAG) docs/install.md; then\
 | ||||||
| 	 	echo "ERROR: Must update docs/install.md with latest tag first.";\
 | 	 	echo "ERROR: Must update docs/install.md with latest tag first.";\
 | ||||||
|  | @ -254,6 +280,10 @@ release-check-tags: | ||||||
| 		echo "ERROR: Must update docs/releases.md with latest tag first.";\
 | 		echo "ERROR: Must update docs/releases.md with latest tag first.";\
 | ||||||
| 		exit 1;\
 | 		exit 1;\
 | ||||||
| 	fi | 	fi | ||||||
|  | 	if [ -n "$(shell git status -s)" ]; then\
 | ||||||
|  | 	  echo "ERROR: Git repository is in an unclean state.";\
 | ||||||
|  | 	  exit 1;\
 | ||||||
|  | 	fi | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # Installing targets
 | # Installing targets
 | ||||||
|  |  | ||||||
							
								
								
									
										716
									
								
								web/package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										716
									
								
								web/package-lock.json
									
										
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue