diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 406743903..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,31 +0,0 @@ -version: 2.1 - -orbs: - moul: moul/build@1.16.0 # https://github.com/moul/build - -jobs: - web: - working_directory: ~/depviz - docker: - - image: circleci/node:10 - steps: - - checkout - - run: sudo npm install -g npm@latest - - restore_cache: - key: dependency-cache-{{ checksum "web/package-lock.json" }} - - run: cd web && npm install - - save_cache: - key: dependency-cache-{{ checksum "web/package-lock.json" }} - paths: - - ./web/node_modules - - run: "cd web && npm run build" - - run: "cd web && npm run test:CI" - - run: "cd web && npm run lint" - -workflows: - main: - jobs: - - moul/golang-build: - gopkg: moul.io/depviz - - moul/docker-build - - web diff --git a/.github/workflows/debug.yml b/.github/workflows/debug.yml new file mode 100644 index 000000000..809ac77b7 --- /dev/null +++ b/.github/workflows/debug.yml @@ -0,0 +1,33 @@ +on: + push: + pull_request: + +jobs: + debug: + if: true + runs-on: ubuntu-latest + steps: + - name: Dump GitHub context + env: + GITHUB_CONTEXT: ${{ toJson(github) }} + run: echo "$GITHUB_CONTEXT" + - name: Dump job context + env: + JOB_CONTEXT: ${{ toJson(job) }} + run: echo "$JOB_CONTEXT" + - name: Dump steps context + env: + STEPS_CONTEXT: ${{ toJson(steps) }} + run: echo "$STEPS_CONTEXT" + - name: Dump runner context + env: + RUNNER_CONTEXT: ${{ toJson(runner) }} + run: echo "$RUNNER_CONTEXT" + - name: Dump strategy context + env: + STRATEGY_CONTEXT: ${{ toJson(strategy) }} + run: echo "$STRATEGY_CONTEXT" + - name: Dump matrix context + env: + MATRIX_CONTEXT: ${{ toJson(matrix) }} + run: echo "$MATRIX_CONTEXT" diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 000000000..d9d41d20c --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,60 @@ +name: Docker +on: + push: + branch: master + tags: ['v*'] + pull_request: + release: + types: [published,released] + +jobs: + multi: + name: "build-and-push" + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Build the container image + uses: docker/build-push-action@v2 + with: + repository: depviz + + - name: Push to GitHub Packages + uses: docker/build-push-action@v2 + if: github.event_name == 'release' || github.event_name == 'push' + with: + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + registry: docker.pkg.github.com + repository: moul/depviz/depviz + tag_with_ref: true + + - name: Check Docker Hub Credentials + id: check_dockerhub_credentials + if: github.event_name == 'release' || github.event_name == 'push' + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + run: | + if [ "${DOCKER_USERNAME}" == "" ]; then + echo "Missing Username" + echo "##[set-output name=missingsecrets;]$(echo yes)" + elif [ "${DOCKER_PASSWORD}" == "" ]; then + echo "Missing Password" + echo "##[set-output name=missingsecrets;]$(echo yes)" + else + echo "All secrets present" + echo "##[set-output name=missingsecrets;]$(echo no)" + fi + + - name: Push to Docker Hub + if: | + (github.event_name == 'release' || github.event_name == 'push') && + contains(steps.check_dockerhub_credentials.outputs.missingsecrets, 'no') + uses: docker/build-push-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + repository: moul/depviz + tag_with_ref: true diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 000000000..ac646cd19 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,162 @@ +name: Go +on: + push: + tags: + - v* + branches: + - master + paths: + - '**.go' + - ".goreleaser.yml" + - ".golangci.yml" + - ".dockerignore" + - "Makefile" + - "rules.mk" + - "go.*" + - ".github/workflows/go.yml" + pull_request: + paths: + - '**.go' + - ".goreleaser.yml" + - ".golangci.yml" + - ".dockerignore" + - "Makefile" + - "rules.mk" + - "go.*" + - ".github/workflows/go.yml" + +jobs: + goreleaser-dryrun: + strategy: + matrix: + golang: [1.16.x] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@master + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.golang }} + - name: Cache Go modules + uses: actions/cache@v2.1.4 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ matrix.golang }}-v1-${{ hashFiles('**/go.sum') }} + restore-keys: ${{ runner.os }}-go-${{ matrix.golang }}-v1- + - name: Run GoReleaser (Dry Run) + uses: goreleaser/goreleaser-action@v2 + with: + version: latest + args: release --rm-dist --snapshot --skip-publish + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + golangci-lint: + runs-on: ubuntu-latest + strategy: + matrix: + golangci_lint: [v1.38] + steps: + - uses: actions/checkout@v2 + - name: golangci-lint + uses: golangci/golangci-lint-action@v2.5.1 + with: + version: ${{ matrix.golangci_lint }} + #github-token: ${{ secrets.GITHUB_TOKEN }} + args: --timeout=2m + only-new-issues: false + working-directory: . + tests-on-windows: + needs: golangci-lint # run after golangci-lint action to not produce duplicated errors + runs-on: windows-latest + strategy: + matrix: + golang: [1.16.x] + steps: + - uses: actions/checkout@v2 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.golang }} + - name: Run tests on Windows + run: make.exe unittest + continue-on-error: true + tests-on-mac: + needs: golangci-lint # run after golangci-lint action to not produce duplicated errors + runs-on: macos-latest + strategy: + matrix: + golang: [1.16.x] + env: + OS: macos-latest + GOLANG: ${{ matrix.golang }} + steps: + - uses: actions/checkout@v2 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.golang }} + - uses: actions/cache@v2.1.4 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ matrix.golang }}-v1-${{ hashFiles('**/go.sum') }} + restore-keys: ${{ runner.os }}-go-${{ matrix.golang }}-v1- + - name: Compile the project + run: make go.install + - name: Run tests on Unix-like operating systems + run: make unittest + - name: Check go.mod and go.sum + run: | + go mod tidy -v + git --no-pager diff go.mod go.sum + git --no-pager diff --quiet go.mod go.sum + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v1 + with: + #token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage.txt + flags: unittests + env_vars: OS,GOLANG + name: codecov-umbrella + fail_ci_if_error: false + tests-on-linux: + needs: golangci-lint # run after golangci-lint action to not produce duplicated errors + runs-on: ubuntu-latest + strategy: + matrix: + golang: + - 1.14.x + - 1.15.x + - 1.16.x + env: + OS: ubuntu-latest + GOLANG: ${{ matrix.golang }} + steps: + - uses: actions/checkout@v2 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.golang }} + - uses: actions/cache@v2.1.4 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ matrix.golang }}-v1-${{ hashFiles('**/go.sum') }} + restore-keys: ${{ runner.os }}-go-${{ matrix.golang }}-v1- + - name: Compile the project + run: make go.install + - name: Check go.mod and go.sum + run: | + go mod tidy -v + git --no-pager diff go.mod go.sum + git --no-pager diff --quiet go.mod go.sum + - name: Run tests on Unix-like operating systems + run: make unittest + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v1 + with: + #token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage.txt + flags: unittests + env_vars: OS,GOLANG + name: codecov-umbrella + fail_ci_if_error: false diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 000000000..173e160c5 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,42 @@ +name: PR + +on: + #pull_request_target: + pull_request: + branches: [ master ] + issue_comment: + types: [ edited ] + +jobs: + preview: + name: Release-Notes Preview + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + git fetch --prune --unshallow --tags + - uses: snyk/release-notes-preview@v1.6.2 + with: + releaseBranch: master + env: + GITHUB_PR_USERNAME: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + doc: + name: Documentation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + depth: 1 + - uses: nosborn/github-action-markdown-cli@master + with: + files: . + config_file: ./tool/lint/.markdownlint.json + - uses: K-Phoen/action-misspell@master + with: + github_token: ${{ github.token }} + reporter: github-pr-review + locale: "US" + - name: alexjs + uses: theashraf/alex-action@master diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6d13289dd..162e471ef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,13 +1,58 @@ -name: Semantic Release - -on: push +name: Release +on: + push: + branches: + - master jobs: - semantic-release: + release: + name: releaser runs-on: ubuntu-latest + strategy: + matrix: + golang: [1.16.x] steps: - - uses: actions/checkout@master - - uses: docker://ghcr.io/codfish/semantic-release-action:v1 - if: github.ref == 'refs/heads/master' + - + name: Checkout + uses: actions/checkout@master + - + name: Unshallow + run: git fetch --prune --unshallow + - + name: Run Semantic Release + id: semantic + uses: docker://ghcr.io/codfish/semantic-release-action:v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - + name: Set up Go + if: steps.semantic.outputs.new-release-published == 'true' + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.golang }} + - + name: Cache Go modules + if: steps.semantic.outputs.new-release-published == 'true' + uses: actions/cache@v2.1.4 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ matrix.golang }}-v1-${{ hashFiles('**/go.sum') }} + restore-keys: ${{ runner.os }}-go-${{ matrix.golang }}-v1- + - + name: Run GoReleaser + if: steps.semantic.outputs.new-release-published == 'true' + uses: goreleaser/goreleaser-action@v2 + with: + version: latest + args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - + name: Register version on pkg.go.dev + if: steps.semantic.outputs.new-release-published == 'true' + run: | + package=$(cat go.mod | grep ^module | awk '{print $2}') + version=v${{ steps.semantic.outputs.release-version }} + url=https://proxy.golang.org/${package}/@v/${version}.info + set -x +e + curl -i $url