mirror of
				https://github.com/goldbergyoni/nodebestpractices.git
				synced 2025-10-31 17:47:26 +08:00 
			
		
		
		
	Merge pull request #966 from rluvaton/migrate-travis-to-github-actions
This commit is contained in:
		
							
								
								
									
										49
									
								
								.github/workflows/lint-and-generate-html-from-markdown.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								.github/workflows/lint-and-generate-html-from-markdown.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | ||||
| name: Lint & Generate HTML from Markdown | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - master | ||||
|   pull_request: | ||||
|  | ||||
| defaults: | ||||
|   run: | ||||
|     shell: bash | ||||
|     working-directory: .operations | ||||
|  | ||||
| jobs: | ||||
|   lint: | ||||
|     name: Lint | ||||
|     runs-on: ubuntu-20.04 | ||||
|     env: | ||||
|       NODE_ENV: test | ||||
|  | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v1 | ||||
|  | ||||
|     - name: Setup Node.js environment | ||||
|       uses: actions/setup-node@v2.1.2 | ||||
|       with: | ||||
|         node-version: '14' | ||||
|  | ||||
|     - run: npm install | ||||
|     - run: npm run lint | ||||
|  | ||||
|   build: | ||||
|     name: Build | ||||
|     runs-on: ubuntu-20.04 | ||||
|  | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v1 | ||||
|  | ||||
|     - name: Setup Node.js environment | ||||
|       uses: actions/setup-node@v2.1.2 | ||||
|       with: | ||||
|         node-version: '14' | ||||
|  | ||||
|     - run: npm install | ||||
|     - run: npm run build | ||||
|       env: | ||||
|         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|         IS_FORK: ${{ github.repository != 'goldbergyoni/nodebestpractices' }} | ||||
| @ -7,6 +7,7 @@ const { readdir, readFile, writeFile } = require('graceful-fs'); | ||||
| const imagemin = require('imagemin'); | ||||
| const imageminJpegtran = require('imagemin-jpegtran'); | ||||
| const imageminPngquant = require('imagemin-pngquant'); | ||||
| const CIInfo = require('ci-info'); | ||||
|  | ||||
| const converter = new showdown.Converter(); | ||||
|  | ||||
| @ -21,8 +22,8 @@ const imageminOpts = { | ||||
|  | ||||
| console.info(`Working in [${process.cwd()}]`); | ||||
|  | ||||
| const { GITHUB_TOKEN, TRAVIS_BRANCH, TRAVIS, TRAVIS_REPO_SLUG } = process.env; | ||||
| const isCI = !!TRAVIS; | ||||
| const { isCI } = CIInfo; | ||||
| const { GITHUB_TOKEN, OWNER_AND_REPO, BRANCH, IS_PR, IS_FORK } = getConfigFromEnv(); | ||||
|  | ||||
| readDirPromise('./') | ||||
|     .then(async (fileNames) => { | ||||
| @ -35,15 +36,15 @@ readDirPromise('./') | ||||
|                 const templateHTML = await readFilePromise(templateFilePath); | ||||
|                 const processedTemplateHTML = await inlineResources(templateHTML); | ||||
|                 const outputHTML = await processMDFile(fileName, processedTemplateHTML); | ||||
|                 console.info(`Completed Generation in [${(Date.now() - startTime) / 1000}s]`); | ||||
|                 console.info(`Completed Generation in [${computeElapsedTime(startTime)}s]`); | ||||
|  | ||||
|                 const outFileName = path.parse(fileName).name + '.html'; | ||||
|                 const outFilePath = path.join('.operations', 'out', outFileName); | ||||
|                 console.info(`Writing output to [${outFilePath}]`); | ||||
|                 await writeFilePromise(outFilePath, outputHTML); | ||||
|  | ||||
|                 if (isCI && TRAVIS_BRANCH === 'master') { | ||||
|                     const repo = new Repository(TRAVIS_REPO_SLUG, { | ||||
|                 if(shouldUpdateGitHubPages()) { | ||||
|                     const repo = new Repository(OWNER_AND_REPO, { | ||||
|                         token: GITHUB_TOKEN | ||||
|                     }); | ||||
|  | ||||
| @ -51,7 +52,7 @@ readDirPromise('./') | ||||
|                     await repo.writeFile('gh-pages', outFileName, outputHTML, ':loudspeaker: :robot: Automatically updating built HTML file', {}); | ||||
|                 } | ||||
|             } catch (err) { | ||||
|                 console.error(`Failed to generate from [${fileName}] in [${(Date.now() - startTime) / 1000}s]`, err); | ||||
|                 console.error(`Failed to generate from [${fileName}] in [${computeElapsedTime(startTime)}s]`, err); | ||||
|                 process.exit(1); | ||||
|             } | ||||
|         } | ||||
| @ -60,6 +61,40 @@ readDirPromise('./') | ||||
|         console.log(`🎉 Finished gen-html 🎉`); | ||||
|     }) | ||||
|  | ||||
| function getConfigFromEnv() { | ||||
|     if (CIInfo.GITHUB_ACTIONS) { | ||||
|         return getConfigFromGithubActionEnv() | ||||
|     } | ||||
|     return process.env; | ||||
| } | ||||
|  | ||||
| function getConfigFromGithubActionEnv() { | ||||
|     const config = { | ||||
|         ...process.env, | ||||
|  | ||||
|         OWNER_AND_REPO: process.env.GITHUB_REPOSITORY, | ||||
|          | ||||
|         IS_PR: CIInfo.IS_PR !== null ? CIInfo.IS_PR : process.env.GITHUB_EVENT_NAME === 'pull_request', | ||||
|          | ||||
|         // We assume we're in PR and and we get the source for the PR | ||||
|         BRANCH: process.env.GITHUB_HEAD_REF, | ||||
|     }; | ||||
|  | ||||
|     if(!config.IS_PR) { | ||||
|         // GITHUB_REF example: `refs/heads/main` | ||||
|         config.BRANCH = process.env.GITHUB_REF.substring('refs/heads/'.length); | ||||
|     } | ||||
|  | ||||
|     return config; | ||||
| } | ||||
|  | ||||
| function shouldUpdateGitHubPages() { | ||||
|     return isCI && !IS_FORK && !IS_PR && BRANCH === 'master'; | ||||
| } | ||||
|  | ||||
| function computeElapsedTime(startTime) { | ||||
|     return (Date.now() - startTime) / 1000; | ||||
| } | ||||
|  | ||||
|  | ||||
| async function processMDFile(filePath = '/', templateHTML = null) { | ||||
|  | ||||
| @ -6,7 +6,7 @@ | ||||
|   "scripts": { | ||||
|     "build": "cd .. && node .operations/gen-html.js", | ||||
|     "test": "echo \"Error: no test specified\" && exit 1", | ||||
|     "lint": "./node_modules/.bin/markdownlint ../README.md" | ||||
|     "lint": "markdownlint ../README.md" | ||||
|   }, | ||||
|   "repository": { | ||||
|     "type": "git", | ||||
| @ -20,11 +20,13 @@ | ||||
|   "homepage": "https://github.com/goldbergyoni/nodebestpractices#readme", | ||||
|   "dependencies": { | ||||
|     "cheerio": "^1.0.0-rc.2", | ||||
|     "ci-info": "^3.1.1", | ||||
|     "github-api": "^3.0.0", | ||||
|     "graceful-fs": "^4.1.15", | ||||
|     "imagemin": "^6.0.0", | ||||
|     "imagemin-jpegtran": "^6.0.0", | ||||
|     "imagemin-pngquant": "^6.0.0", | ||||
|     "is-ci": "^3.0.0", | ||||
|     "markdownlint-cli": "^0.18.0", | ||||
|     "showdown": "^1.9.0" | ||||
|   } | ||||
|  | ||||
							
								
								
									
										10
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								.travis.yml
									
									
									
									
									
								
							| @ -1,10 +0,0 @@ | ||||
| language: node_js | ||||
| node_js: lts/* | ||||
| script:   | ||||
|   - cd .operations | ||||
|   - npm i | ||||
|   - export PR=https://api.github.com/repos/$TRAVIS_REPO_SLUG/pulls/$TRAVIS_PULL_REQUEST | ||||
|   - export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo `curl -s $PR | jq -r .head.ref`; fi) | ||||
|   - echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH" | ||||
|   - npm run lint | ||||
|   - npm run build | ||||
		Reference in New Issue
	
	Block a user
	 Raz Luvaton
					Raz Luvaton