# Attention: if you submit an improvement for a Namecoin Cirrus config, please # file a GitHub issue about it at the namecoin/meta repo, so that we can make # sure it propagates to all the other Namecoin repos. Thanks! task: alias: Go Lint container: image: golangci/golangci-lint:latest install_script: - apt-get update - apt-get install -y libcap-dev path_script: - source testdata/move_to_gopath.bash matrix: - env: GO111MODULE: "off" GOLANGCI_MODULES_ARGS: "--disable=gomoddirectives,gomodguard" MODULES_NAME: " Modules Off" fetch_script: - go get -tags "$GOX_TAGS" -d -v -t github.com/$CIRRUS_REPO_FULL_NAME/... - GOOS=windows go get -tags "$GOX_TAGS" -d -v -t github.com/$CIRRUS_REPO_FULL_NAME/... - go generate github.com/namecoin/certinject/... - go generate github.com/namecoin/x509-compressed/... - go get -tags "$GOX_TAGS" -d -v -t github.com/$CIRRUS_REPO_FULL_NAME/... - env: GOLANGCI_MODULES_ARGS: "" MODULES_NAME: "" systemd_script: - mkdir -p $(go env GOPATH)/src/github.com/coreos - cd $(go env GOPATH)/src/github.com/coreos - git clone https://github.com/coreos/go-systemd.git certinject_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - cd ../ - git clone https://github.com/namecoin/certinject.git - cd certinject - go mod init github.com/namecoin/certinject - go mod edit -replace github.com/coreos/go-systemd=$(go env GOPATH)/src/github.com/coreos/go-systemd - go mod tidy - go generate ./... - go mod tidy - go install -v ./... x509_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - cd ../ - git clone https://github.com/namecoin/x509-compressed.git - cd x509-compressed - go mod init github.com/namecoin/x509-compressed - go mod tidy - go generate ./... - go mod tidy - go install -v ./... fetch_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - go mod init github.com/"$CIRRUS_REPO_FULL_NAME" - go mod edit -replace github.com/coreos/go-systemd=$(go env GOPATH)/src/github.com/coreos/go-systemd -replace github.com/namecoin/certinject=../certinject -replace github.com/namecoin/x509-compressed=../x509-compressed - go mod tidy lint_script: - cd $(go env GOPATH)/src/github.com/$CIRRUS_REPO_FULL_NAME/ # nosnakecase complains about stdlib API's that we can't change. - golangci-lint run --enable-all --disable execinquery,exhaustruct,gochecknoglobals,gomnd,interfacer,nosnakecase $GOLANGCI_ARGS $GOLANGCI_MODULES_ARGS -v --timeout 5m --out-format json > $CIRRUS_WORKING_DIR/lint-report.json matrix: - name: "Go Lint $GOOS New$MODULES_NAME" env: # gci seems to be buggy with --new-from-rev= GOLANGCI_ARGS: "--new-from-rev=HEAD~ --disable=gci" - name: "Go Lint $GOOS Mandatory$MODULES_NAME" env: # TODO: Re-enable dupword after ncdns issue #166 is fixed. # TODO: Re-enable varnamelen after golangci-lint v1.44 is released. GOLANGCI_ARGS: "--disable=cyclop,deadcode,dupword,errorlint,exhaustivestruct,forbidigo,forcetypeassert,funlen,gci,gocognit,gocritic,godot,godox,goerr113,gofumpt,goimports,golint,gosec,gosimple,govet,ineffassign,lll,maligned,nakedret,nestif,nilerr,nlreturn,nonamedreturns,paralleltest,revive,scopelint,staticcheck,stylecheck,thelper,unconvert,unparam,unused,varnamelen,wastedassign,whitespace,wrapcheck,wsl" - name: "Go Lint $GOOS$MODULES_NAME" env: GOLANGCI_ARGS: "" allow_failures: true matrix: - env: GOOS: linux - env: GOOS: windows always: golangci_artifacts: path: lint-report.json type: text/json format: golangci task: name: ShellCheck container: image: fedora:latest cpu: 1 memory: 1G install_script: dnf install -y ShellCheck lint_script: bash testdata/shellcheck.bash task: name: "Unit Tests $CONTAINER_NAME$MODULES_NAME" alias: Unit Tests matrix: - env: GO_VERSION: latest CONTAINER_NAME: "Go $GO_VERSION" container: image: golang:$GO_VERSION install_script: - apt-get update - apt-get install -y libcap-dev - env: CONTAINER_NAME: "Fedora latest" container: image: fedora:latest install_script: - dnf install -y golang libcap-devel path_script: - source testdata/move_to_gopath.bash matrix: - env: GO111MODULE: "off" MODULES_NAME: " Modules Off" fetch_script: - go get -tags "$GOX_TAGS" -d -v -t github.com/$CIRRUS_REPO_FULL_NAME/... - GOOS=windows go get -tags "$GOX_TAGS" -d -v -t github.com/$CIRRUS_REPO_FULL_NAME/... - go generate github.com/namecoin/certinject/... - go generate github.com/namecoin/x509-compressed/... - go get -tags "$GOX_TAGS" -d -v -t github.com/$CIRRUS_REPO_FULL_NAME/... - env: MODULES_NAME: "" systemd_script: - mkdir -p $(go env GOPATH)/src/github.com/coreos - cd $(go env GOPATH)/src/github.com/coreos - git clone https://github.com/coreos/go-systemd.git certinject_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - cd ../ - git clone https://github.com/namecoin/certinject.git - cd certinject - go mod init github.com/namecoin/certinject - go mod edit -replace github.com/coreos/go-systemd=$(go env GOPATH)/src/github.com/coreos/go-systemd - go mod tidy - go generate ./... - go mod tidy - go install -v ./... x509_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - cd ../ - git clone https://github.com/namecoin/x509-compressed.git - cd x509-compressed - go mod init github.com/namecoin/x509-compressed - go mod tidy - go generate ./... - go mod tidy - go install -v ./... fetch_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - go mod init github.com/"$CIRRUS_REPO_FULL_NAME" - go mod edit -replace github.com/coreos/go-systemd=$(go env GOPATH)/src/github.com/coreos/go-systemd -replace github.com/namecoin/certinject=../certinject -replace github.com/namecoin/x509-compressed=../x509-compressed - go mod tidy # Get the test suite - mkdir -p $(go env GOPATH)/src/github.com/hlandau - cd $(go env GOPATH)/src/github.com/hlandau - git clone https://github.com/hlandau/nctestsuite.git test_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - go install -tags "$GOX_TAGS" -v ./... - export GOPATH=$(go env GOPATH) - go test -tags "$GOX_TAGS" -v github.com/$CIRRUS_REPO_FULL_NAME/... env: GOX_TAGS: "" task: name: "Functional Tests $CI_DISTRO Go $GO_VERSION$MODULES_NAME" alias: "Functional Tests" matrix: - compute_engine_instance: image_project: debian-cloud image: family/debian-11 platform: linux cpu: 1 memory: 1G env: CI_DISTRO: debian - compute_engine_instance: image_project: cirrus-images image: family/docker-builder platform: linux cpu: 1 memory: 1G env: CI_DISTRO: ubuntu bitcoind_cache: folder: /tmp/bitcoind populate_script: mkdir -p /tmp/bitcoind install_script: - apt-get update # bind9-dnsutils contains dig - apt-get install -y dnssec-trigger bind9-dnsutils # Namecoin Core - BITCOIND_URL=$(curl https://www.namecoin.org/download/ | grep x86_64-linux-gnu.tar.gz | grep -v 0.13.99 | grep --only-matching https://.*.tar.gz) - BITCOIND_FILENAME=$(echo $BITCOIND_URL | grep -E --only-matching 'namecoin-nc.*.tar.gz') - BITCOIND_PATH=/tmp/bitcoind/$BITCOIND_FILENAME - tar -xaf $BITCOIND_PATH || (rm -f /tmp/bitcoind/* && curl --output $BITCOIND_PATH $BITCOIND_URL && tar -xaf $BITCOIND_PATH) - cp -a namecoin-*/* /usr/ # ncdns - NCDNS_URL=https://api.cirrus-ci.com/v1/artifact/build/$CIRRUS_BUILD_ID/Cross-Compile%20Go%20$GO_VERSION/binaries/dist/ncdns--linux_amd64.tar.gz - curl -o ncdns.tar.gz $NCDNS_URL - tar -xaf ncdns.tar.gz - cp -a ncdns--*/* /usr/ # Configure DNSSEC-Trigger - cp _doc/unbound.conf.d/ncdns.conf _doc/unbound.conf.d/ncdns-insecure.conf /etc/unbound/unbound.conf.d - systemctl restart unbound bitcoind_service_background_script: - testdata/run_bitcoind.sh ncdns_service_background_script: # ncdns refuses to run as root - adduser ncdns --disabled-password - ncdns -conf testdata/ncdns.conf regtest_script: - sleep 10s - testdata/regtest.sh depends_on: - "Cross-Compile Go $GO_VERSION$MODULES_NAME" env: GO_VERSION: latest MODULES_NAME: "" task: name: "Cross-Compile Go $GO_VERSION$MODULES_NAME" alias: Cross-Compile container: image: golang:$GO_VERSION cpu: 8 memory: 8G install_script: - dpkg --add-architecture i386 - dpkg --add-architecture armhf - dpkg --add-architecture arm64 # TODO: Support cgo for ppc64. - dpkg --add-architecture ppc64el - apt-get update - apt-get install -y gcc-multilib libcap-dev libc6-dev:i386 libcap-dev:i386 libc6-dev:armhf libcap-dev:armhf libc6-dev:arm64 libcap-dev:arm64 libc6-dev:ppc64el libcap-dev:ppc64el path_script: - source testdata/move_to_gopath.bash matrix: - env: GO111MODULE: "off" MODULES_NAME: " Modules Off" gox_script: - go get github.com/mitchellh/gox fetch_script: - go get -tags "$GOX_TAGS" -d -v -t github.com/$CIRRUS_REPO_FULL_NAME/... - GOOS=windows go get -tags "$GOX_TAGS" -d -v -t github.com/$CIRRUS_REPO_FULL_NAME/... - go generate github.com/namecoin/certinject/... - go generate github.com/namecoin/x509-compressed/... - go get -tags "$GOX_TAGS" -d -v -t github.com/$CIRRUS_REPO_FULL_NAME/... - env: MODULES_NAME: "" gox_script: - go install github.com/mitchellh/gox@latest systemd_script: - mkdir -p $(go env GOPATH)/src/github.com/coreos - cd $(go env GOPATH)/src/github.com/coreos - git clone https://github.com/coreos/go-systemd.git certinject_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - cd ../ - git clone https://github.com/namecoin/certinject.git - cd certinject - go mod init github.com/namecoin/certinject - go mod edit -replace github.com/coreos/go-systemd=$(go env GOPATH)/src/github.com/coreos/go-systemd - go mod tidy - go generate ./... - go mod tidy - go install -v ./... x509_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - cd ../ - git clone https://github.com/namecoin/x509-compressed.git - cd x509-compressed - go mod init github.com/namecoin/x509-compressed - go mod tidy - go generate ./... - go mod tidy - go install -v ./... fetch_script: - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - go mod init github.com/"$CIRRUS_REPO_FULL_NAME" - go mod edit -replace github.com/coreos/go-systemd=$(go env GOPATH)/src/github.com/coreos/go-systemd -replace github.com/namecoin/certinject=../certinject -replace github.com/namecoin/x509-compressed=../x509-compressed - go mod tidy build_script: - rm -rf idist - cd $(go env GOPATH)/src/github.com/"$CIRRUS_REPO_FULL_NAME" - CGO_ENABLED=1 gox -tags="$GOX_TAGS" -parallel=8 -osarch 'linux/386 linux/amd64 linux/arm linux/arm64 linux/ppc64le' -output "$GOPATH/releasing/idist/$CIRRUS_REPO_NAME-$CIRRUS_TAG-{{.OS}}_{{.Arch}}/bin/{{.Dir}}" ./... - CGO_ENABLED=0 gox -tags="$GOX_TAGS" -parallel=8 -osarch 'darwin/amd64 freebsd/386 freebsd/amd64 freebsd/arm linux/ppc64 openbsd/386 openbsd/amd64 netbsd/386 netbsd/amd64 netbsd/arm dragonfly/amd64 solaris/amd64 windows/386 windows/amd64' -output "$GOPATH/releasing/idist/$CIRRUS_REPO_NAME-$CIRRUS_TAG-{{.OS}}_{{.Arch}}/bin/{{.Dir}}" ./... dist_script: - mv $GOPATH/releasing/idist ./idist - bash "testdata/dist.bash" binaries_artifacts: path: "dist/*" env: GOX_TAGS: "" GO_VERSION: latest task: # GitHub Release Upload # TODO: implement this. name: GitHub Release container: image: golang:latest cpu: 1 memory: 1G depends_on: - Go Lint - ShellCheck - Unit Tests - Cross-Compile - Functional Tests bin_cache: folder: "idist" fingerprint_script: - "echo cross_compile_bin_go_%GO_VERSION%" reupload_on_changes: false populate_script: - "mkdir idist" install_script: - go get github.com/tcnksm/ghr release_script: - bash "testdata/release.bash" allow_failures: true env: GOX_TAGS: "" GO_VERSION: latest # TODO: Add Windows unit tests # TODO: "Testing config parsing" from travis.bash # TODO: Add multiple Go versions to Gox builds and unit tests # TODO: Add debug stripping and path stripping to Gox for repro builds # TODO: Re-add darwin/386 for old Go versions where it was supported # TODO: Fix upload repo for tagged commits (don't use Nightly repo for this) # TODO: Skip Signify and Release if it's not applicable # TODO: Signify Nightlies # TODO: IRC notifications on failure # TODO: Cron