# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions name: CI on: push: branches: [ main ] tags: ['*'] pull_request: branches: [ main ] jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: node-version: [12.x, 14.x] os: [ubuntu-latest] steps: - uses: actions/checkout@v2 # extract branch name - if: github.event_name == 'pull_request' run: echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV - if: github.event_name != 'pull_request' run: echo "BRANCH_NAME=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV # print branch name - name: Get branch name run: echo 'The branch name is' $BRANCH_NAME - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - run: npm ci # test code - run: npm run standard - run: npm run validate - run: npm run nyc # Test global install of the package - run: npm pack . - run: npm install -g solid-server-*.tgz # Run the Solid test-suite - run: bash test/surface/run-solid-test-suite.sh $BRANCH_NAME # TODO: The pipeline should automate publication to npm, so that the docker build gets the correct version # This job will only dockerize solid-server@latest / solid-server@ from npmjs.com! docker-hub: needs: build name: Publish to docker hub if: github.event_name != 'pull_request' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: olegtarasov/get-tag@v2.1 id: tagName with: tagRegex: "v?(?.*)" - name: Lint dockerfile working-directory: docker-image run: pwd && ls -lah && make lint - name: Run tests working-directory: docker-image run: SOLID_SERVER_VERSION=${{ steps.tagName.outputs.version }} make test - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Docker meta id: meta uses: docker/metadata-action@v3 with: images: nodesolidserver/node-solid-server - name: Login to DockerHub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push id: docker_build uses: docker/build-push-action@v2 with: context: ./docker-image/src build-args: SOLID_SERVER_VERSION=${{ steps.tagName.outputs.version }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}