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: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps:  | ||||
|       - name: Install Go | ||||
|       - | ||||
|         name: Install Go | ||||
|         uses: actions/setup-go@v2 | ||||
|         with: | ||||
|           go-version: '1.17.x' | ||||
|       - name: Install node | ||||
|           go-version: '1.18.x' | ||||
|       - | ||||
|         name: Install node | ||||
|         uses: actions/setup-node@v2 | ||||
|         with: | ||||
|           node-version: '16' | ||||
|       - name: Checkout code | ||||
|       - | ||||
|         name: Checkout code | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Install dependencies | ||||
|         run: sudo apt update && sudo apt install -y python3-pip curl | ||||
|       - name: Build docs (required for tests) | ||||
|       - | ||||
|         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 docs (required for tests) | ||||
|         run: make docs | ||||
|       - name: Build web app (required for tests) | ||||
|       - | ||||
|         name: Build web app (required for tests) | ||||
|         run: make web | ||||
|       - name: Run tests, formatting, vetting and linting | ||||
|       - | ||||
|         name: Run tests, formatting, vetting and linting | ||||
|         run: make check | ||||
|       - name: Run coverage | ||||
|       - | ||||
|         name: Run coverage | ||||
|         run: make coverage | ||||
|       - name: Upload coverage to codecov.io | ||||
|       - | ||||
|         name: Upload coverage to codecov.io | ||||
|         run: make coverage-upload | ||||
|  |  | |||
|  | @ -157,6 +157,7 @@ universal_binaries: | |||
|   - | ||||
|     id: ntfy_darwin_all | ||||
|     replace: true | ||||
|     name_template: ntfy | ||||
| checksum: | ||||
|   name_template: 'checksums.txt' | ||||
| snapshot: | ||||
|  |  | |||
							
								
								
									
										52
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										52
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -79,6 +79,18 @@ build: web docs cli | |||
| update: web-deps-update cli-deps-update docs-deps-update | ||||
| 	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
 | ||||
| 
 | ||||
| docs: docs-deps docs-build | ||||
|  | @ -114,28 +126,29 @@ web-deps: | |||
| web-deps-update: | ||||
| 	cd web && npm update | ||||
| 
 | ||||
| 
 | ||||
| # Main server/client build
 | ||||
| 
 | ||||
| cli: cli-deps | ||||
| 	goreleaser build --snapshot --rm-dist --debug | ||||
| 	goreleaser build --snapshot --rm-dist | ||||
| 
 | ||||
| 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 | ||||
| 	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 | ||||
| 	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 | ||||
| 	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 | ||||
| 	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 | ||||
| 	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 | ||||
| 	# This is a target to build the CLI (including the server) manually. | ||||
|  | @ -177,6 +190,7 @@ cli-deps-static-sites: | |||
| 
 | ||||
| cli-deps-all: | ||||
| 	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: | ||||
| 	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: | ||||
| 	go get -u | ||||
| 	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
 | ||||
| 
 | ||||
|  | @ -238,13 +264,13 @@ staticcheck: .PHONY | |||
| 
 | ||||
| # Releasing targets
 | ||||
| 
 | ||||
| release: clean update cli-deps release-check-tags docs web check | ||||
| 	goreleaser release --rm-dist --debug | ||||
| release: clean update cli-deps release-checks docs web check | ||||
| 	goreleaser release --rm-dist | ||||
| 
 | ||||
| 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-)) | ||||
| 	if ! grep -q $(LATEST_TAG) docs/install.md; then\
 | ||||
| 	 	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.";\
 | ||||
| 		exit 1;\
 | ||||
| 	fi | ||||
| 	if [ -n "$(shell git status -s)" ]; then\
 | ||||
| 	  echo "ERROR: Git repository is in an unclean state.";\
 | ||||
| 	  exit 1;\
 | ||||
| 	fi | ||||
| 
 | ||||
| 
 | ||||
| # 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