Github actions, problem with dep installing - go

I have this go.yml for github actions
name: Test
on: [push, pull_request]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.15
uses: actions/setup-go#v2
with:
go-version: 1.15
id: go
- name: Check out code
uses: actions/checkout#v2
- name: Get dependencies
run: |
if [ -f Gopkg.toml ]; then
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
dep ensure
fi
- name: Build
run: go build -v ./...
- name: Test
run: go test -v ./...
It builds with error: home/runner/work/project/project is not within a known GOPATH/src
Error: Process completed with exit code 1.
How to fix it problem?

The default value of GOPATH is $HOME/go.
Your project folder is outside of this GOPATH hence the error.
You have two ways to fix this problem.
(Preferred) Update your project to use go.mod. It's the newer, nicer dependency management solution in go and doesn't require your project to be in GOPATH.
Assuming you are using Go version newer than 1.12, Remove the Gopkg.toml and Gopkg.lock (if you have it).
Run,
a. go mod init <project-name> Replace <project-name> with the name of your project.
b. Run go mod tidy and it'll add all the dependencies you are using in your project.
c. Run go build once to make sure your project still builds. If it doesn't, You can add the missing dependencies manually in go.mod.
Commit go.mod and go.sum(if you need deterministic builds).
Removed this from your CI config,
if [ -f Gopkg.toml ]; then
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
dep ensure
fi
and just build the project. It should work.
Set the GOPATH correctly in your CI config before calling dep ensure. I think GOPATH=/home/runner/work/project/project should work but I am not aware of the exact specifics related to GOPATH so you'll just have to try.

Related

How can I get my github action to compile my rust program for Mac on Ubuntu

Attempting to compile a rust program for usage on Mac. Configured Github Action as follows:
build_macos:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout#v3
- name: Install required tools
run: sudo apt install libdbus-1-dev pkg-config libudev-dev libglfw3-dev libglew-dev
- name: Install required target
run: rustup target add aarch64-apple-darwin
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose
- name: Build Release
run: cargo build --verbose --release --target=aarch64-apple-darwin
- name: Artifact MacOS
uses: actions/upload-artifact#v3
with:
name: Build MacOS
path: ./target/aarch64-apple-darwin/release/control_harts
retention-days: 5
which fails on Build Release Image
Investigating the log further points me to the following (full log):
= note: cc: error: unrecognized command-line option '-arch'
cc: error: unrecognized command-line option '-framework'
cc: error: unrecognized command-line option '-framework'
What would be the best way to solve this? If any further information is required, please let me know.
P.S. the program uses quite some libraries, but it does not appear to fail when compiling those, but only on the project itself. This makes me believe it maybe a configuration error on my end, but I cannot seem to figure that out.
P.P.S. the windows and linux tasks pass and produce a functioning executable, with all tests passing.
P.P.P.S. If it is preferable that I make a minimal piece of code or a repo that runs into this issue I could, but I am hoping the issue is just a simple oversight.
I was expecting a MacOS executable to pop out like the files for windows and linux do, but unfortunately the task runs into this error.
I tried looking for existing solutions for this problem, and I found:
(1, 2, 3 found after searching for the first line (-arch), 4 and 5 for the second line (-framework))
1. -> I cannot seem to configure these flags myself, as (from my very limited understanding) they are either part of the packages' build scripts or generated by rustc.
2. -> Unsolved github issue
3. -> Potentially solved github issue but it seems this is just part of the build script of that lib
4. -> Requires access to the MakeFile, which I may have but I cannot seem to figure out where it is.
5. -> for GoLang, and also without solution.
I was building with runs-on: ubuntu-latest as Azeem pointed out. After changing this to runs-on: macos-latest and removing the Install required tools task, it ran smoothly and created the distr as I wanted.
I cannot test this because I do not have a Mac, but the test cases pass so it seems ok.

How do I migrate from Dep to Go Modules

I'm currently using Dep and would like to start using Go modules.
How do I migrate?
Migrating from Dep to Go Modules is very easy.
Run go version and make sure you're using Go version 1.11 or later.
Move your code outside of GOPATH or set export GO111MODULE=on.
go mod init [module path]: This will import dependencies from Gopkg.lock.
go mod tidy: This will remove unnecessary imports, and add indirect ones.
(Optional) Delete your vendor folder (rm -rf vendor/ or move to trash)
go build: Do a test build to see if it works.
rm -f Gopkg.lock Gopkg.toml: Delete the obsolete files used for Dep.
Go has imported my dependencies from Dep by reading the Gopkg.lock file and also created a go.mod file.
If you want to keep your vendor folder:
Run go mod vendor to copy your dependencies into the vendor folder.
Run go build -mod=vendor to ensure go build uses your vendor folder.
To add to #Nicholas answer's:
Here is from the offical golang documenation:
To create a go.mod for an existing project:
Navigate to the root of the module's source tree outside of GOPATH:
$ export GO111MODULE=on # manually active module mode
$ cd $GOPATH/src/<project path> # e.g., cd $GOPATH/src/you/hello
Create the initial module definition and write it to the go.mod file:
$ go mod init
This step converts from any existing dep Gopkg.lock file or from any of the other nine total supported dependency formats, adding require statements to match the existing configuration.
Build the module. When executed from the root directory of a module, the ./... pattern matches all the packages within the current module. go build will automatically add missing or unconverted dependencies as needed to satisfy imports for this particular build invocation:
$ go build ./...
Test the module as configured to ensure that it works with the selected versions:
$ go test ./...
(Optional) Run the tests for your module plus the tests for all direct and indirect dependencies to check for incompatibilities:
$ go test all
Another way to upgrade to modules.
Remove the Gopkg.toml and Gopkg.lock
rm Gopkg.*
Initialise the Go modules
GO111MODULE=on go mod init
Run go mod tidy to pull all the indirect modules and remove unused modules
GO111MODULE=on go mod tidy
Run build to ensure everything works fine
go build
Tip in case you face few modules not found then manually update the modules tag in go.mod file.

How to create github release using TravisCI from multiple build matrixes?

I have setup a simple go repository and configured TravisCI in the following way
language: go
go:
- 1.8.x
- master
gobuild_args: -ldflags "-X main.Version=${TRAVIS_TAG} -X main.buildTime=`date -u '+%Y-%m-%d_%I:%M:%S%p'` -X main.commitId=${TRAVIS_COMMIT}"
env:
- GOOS=linux GOARCH=amd64
- GOOS=windows GOARCH=amd64
after_success:
- ./build.sh
matrix:
allow_failures:
- go: master
This will essentially create 4 different builds in TravisCI. This is great for building a cross compilation project where I can build windows and linux binaries separately.
What I have been struggling to do is to create 1 single release in Github from all the binaries generated across those builds?
TravisCI documentation says they support releases but it is very vague on how to handle such a scenario.
Don't all the the build run on different virtual servers? If so how do I specify the file in each
If I setup a release will it run for each build? How does work with github, will it fail because the release will be attempted to be created several times?
Has anybody attempted this?

How to manage building golang projects on travis-ci

I'm developing Golang project and using TravisCI. As dependency tool, Godeps is used.
After running test by git push, something error was happened as below.
# command-line-arguments
cmd/proj/main_test.go:6:2: cannot find package
"command-line-/vendor/github.com/xxxxx/xxxxx/abc" in any of:
/home/travis/.gimme/versions/go1.6.linux.amd64/src/command-line-/vendor/github.com/xxxxx/xxxxx/xxx
Why it can't find package?
As build log, it seems to work well by go get command.
My travis.yml is here.
language: go
sudo: false
go:
- 1.6
- tip
services:
- redis-server
env:
global:
- secure: "xxxxx"
script:
- go fmt ./...
- go vet $(go list ./... | grep -v /vendor/)
- go test -v cmd/xxxx/*.go -xxxx ${XXXXX}
before_install:
- go get github.com/tools/godep
branches:
only:
- master
tip of go version is OK.
But 1.6 or 1.5 version can't run well.
How can I manage that situation?
The way Go 1.6 manages dependencies is different than Go 1.5 and previous versions.
1.6 introduces the /vendor folder. Whenever you import a dependency, if the library exists in /vendor, then the library is loaded.
The behavior was introduced in 1.5, but in that version it was experimental. It means that you need to enable it using the GO15VENDOREXPERIMENT=1 environment variable.
If you only need to provide support for 1.5 and 1.6, then simply add the variable to Travis when building 1.5 projects.
If you need to extend support also for versions before 1.5, then it's a little bit more complicated.

How to setup Coverity Scan on GitHub with TravisCI?

I've managed to setup TravisCI for my C++ hosted on Github project, it works fine.
I would like to move on to static analysis of my C++ code with Coverity Scan.
Automatic upload with TravisCI to Scan Coverity is possible but I can't find a way to make it work.
My git repository is simple, there are two branches: master and coverity_scan.
To avoid triggering static analysis each time I'm pushing something, all stuff related to Scan Coverity is filled in coverity_scan branch:
language: cpp
env:
global:
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
# via the "travis encrypt" command using the project repo's public key
- secure: "UEHXnbNPk49F6Ta/+d+UZl74EhtIevExwCo1l6qBndw+LvIXQDNSfsFiIJsZVfSgacBEOtd7CSY6rtccDpGeS9oX5/G/pnCz/2Cu+NOCCWlpy/S3qcUtdz52nMVatTgRhEi14WfrghpHk7nxxSi1W5+VIBfew+In11V1Xln3W06hhGOOK17Ljik18LbjSY1K9yVwK60r3tzwzSBMm/MArsqCeigzw15c0THQUtLlaLg/5nfP31f1QV9W1WlF4zIHjzd0970M385vNDDPyG+qRCfMPDEJrWb9/hJVi5x2poHLDObSE25rSQqfzc5nfiSDbH888mkdbBZXSwMVveVEhufyEk0nxI0Tddh/WNYFs+7g1gyV9409Tj288Omx++zpb0jM7/++wgkRwvBnqfBN7GWxoZJ9rHTxauJ+IIOR1jvskCTFMFMLI3C1+IpT4SgV0i6v2PtRsdGbXgI9qywhmPEjC+lS6Nu/rZQItr27rZowvw1ITYwJrDX4YQOAZxJkYNLFdGfqEMSjx0nfq6Kpl/4PaHQ7X0OtnJNgssMk3LNcYEwV1tLhTt+qODONjB7yWilcsWo8yVurr4vnFS2nIV7N4XgBvJcZHWfovxiQhfJU2UQxDvCYlDJ0RpM8kxpze+LR2vh+BbYOgPcr7YKG9MoAbsQXDGiF7yTz1VjVQr4="
addons:
coverity_scan:
project:
name: LeFlou/Citadel
build_command_prepend: "cmake"
build_command: "make"
branch_pattern: coverity_scan
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gcc-4.8
- g++-4.8
- clang
compiler:
- gcc
- clang
before_script:
- cmake .
script:
- make
install:
# Use g++4.8 and not 4.6 (C++11 missing)
- if [ "$CXX" = "g++" ]; then export CXX="g++-4.8" CC="gcc-4.8"; fi
branches:
only:
- coverity_scan
I want to trigger static analysis only when I push to coverity_scan, not building on TravisCI.
However, continuous integration must be working on master branch.
For the moment, code is only built but never uploaded to Coverity Scan.
What's wrong in my configuration ?
Edit:
I noticed in TravisCI validator multiple addons generate errors, only the last entry is processed. On the other hand, coverity_scan seem to build without trouble (I need apt to install more recent versions of g++, this is related to C++11 features).
Edit 20150910:
I merged both addons sections and this works.
But I'm still stuck on "Submitted first build" step.
I also changed COVERITY_SCAN_TOKEN, still this does not submit the build to Coverity Scan
TravisCI build with these changes
I think your problem is in build_command_prepend, it's cmake . and not cmake.
I think the problem might be that you indicated the branch you are using as coverity_scan here:
branch_pattern: coverity_scan
but you said you are pushing to the branch scan_coverity. So you might want to try pushing to coverity_scan instead?
I had trouble too but got it working eventually.
First go to your "Project Settings" in Coverity. Copy the token
Install the travis gem locally.
Then run:
travis encrypt -r <coverity_project_name> COVERITY_SCAN_TOKEN=<token>
For "coverity_project_name", use the name that is shown in your Coverity dashboard exactly as it appears.
You need to put the key generated by 'travis encrypt' into the "secure" field. So you should wind up with something like this:
- os: linux
dist: bionic
compiler: gcc
env:
- secure: "key generated by travis -r"
before_install:
- echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-
addons:
coverity_scan:
project:
name: "theimpossibleastronaut/rmw"
description: "Console recycle bin written in C"
notification_email:
build_command_prepend: "./configure"
build_command: "make"
branch_pattern: coverity_scan

Resources