Velvet Star Monitor

Standout celebrity highlights with iconic style.

news

NoCredentialProviders: no valid providers in chain error in electron-updater with AWS S3

Writer Matthew Harrington

I'm trying to implement autoupdate of my electron-react application using electron-updater and AWS S3 bucket. But getting error:

⨯ NoCredentialProviders: no valid providers in chain. Deprecated. For verbose messaging see aws.Config.CredentialsChainVerboseErrors Y:/Documents/app-builder/pkg/publisher/s3.go:169 Y:/Documents/app-builder/pkg/publisher/s3.go:57
(*actionMixin).applyActions C:/Users/develar/go/pkg/mod/[email protected]+incompatible/actions.go:28
(*Application).applyActions C:/Users/develar/go/pkg/mod/[email protected]+incompatible/app.go:557
(*Application).execute C:/Users/develar/go/pkg/mod/[email protected]+incompatible/app.go:390
(*Application).Parse C:/Users/develar/go/pkg/mod/[email protected]+incompatible/app.go:222
main.main Y:/Documents/app-builder/main.go:90
runtime.main c:/go/src/runtime/proc.go:203
runtime.goexit c:/go/src/runtime/asm_amd64.s:1373 ⨯ NoCredentialProviders: no valid providers in chain. Deprecated. For verbose messaging see aws.Config.CredentialsChainVerboseErrors Y:/Documents/app-builder/pkg/publisher/s3.go:169 Y:/Documents/app-builder/pkg/publisher/s3.go:57
(*actionMixin).applyActions C:/Users/develar/go/pkg/mod/[email protected]+incompatible/actions.go:28
(*Application).applyActions C:/Users/develar/go/pkg/mod/[email protected]+incompatible/app.go:557
(*Application).execute C:/Users/develar/go/pkg/mod/[email protected]+incompatible/app.go:390
(*Application).Parse C:/Users/develar/go/pkg/mod/[email protected]+incompatible/app.go:222
main.main Y:/Documents/app-builder/main.go:90
runtime.main c:/go/src/runtime/proc.go:203
runtime.goexit c:/go/src/runtime/asm_amd64.s:1373 ⨯ Cannot cleanup:
Error #1 --------------------------------------------------------------------------------
Error: D:\directoryofmyapp\myappname\node_modules\app-builder-bin\win\x64\app-builder.exe exited with code ERR_ELECTRON_BUILDER_CANNOT_EXECUTE at ChildProcess.<anonymous> (D:\directoryofmyapp\myappname\node_modules\builder-util\src\util.ts:243:14) at Object.onceWrapper (events.js:422:26) at ChildProcess.emit (events.js:315:20) at maybeClose (internal/child_process.js:1048:16) at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5)
Error #2 --------------------------------------------------------------------------------
Error: D:\directoryofmyapp\myappname\node_modules\app-builder-bin\win\x64\app-builder.exe exited with code ERR_ELECTRON_BUILDER_CANNOT_EXECUTE at ChildProcess.<anonymous> (D:\directoryofmyapp\myappname\node_modules\builder-util\src\util.ts:243:14) at Object.onceWrapper (events.js:422:26) at ChildProcess.emit (events.js:315:20) at maybeClose (internal/child_process.js:1048:16) at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5) stackTrace=

Here is my package.json:

{ "name": "myappname", "version": "0.1.0", "private": true, "license": "MIT", "productName": "myappname", "author": "Bakhrom", "description": "myappname", "homepage": "./", "main": "./public/electron.js", "build": { "appId": "com.myappname.electron-app", "files": [ "build/electron.js", "build/.env", "./~/.aws/credentials", "~/.aws/credentials", "./.env", ".env" ], "directories": { "buildResources": "./public/**/*" }, "win": { "icon": "./public/img/favicon.png" }, "publish": { "provider": "s3", "bucket": "mybucketname", "region": "ap-southeast-1" } }, "dependencies": { "@fluentui/react": "^7.146.0", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2" "electron-is-dev": "^1.2.0", "electron-pos-printer": "^1.2.0", "electron-updater": "^4.3.5", ... other packages }, "scripts": { "start": "react-scripts start", "build": "node --expose-gc --max-old-space-size=1900 node_modules/react-scripts/scripts/build.js", "test": "react-scripts test", "dev": "concurrently \"npm start\" \"wait-on && electron .\"", "electron-build": "npm run build && electron-builder build", "deploy": "npm run build && electron-builder build --win --publish always", "postinstall": "electron-builder install-app-deps" }, "eslintConfig": { "extends": "react-app" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "devDependencies": { "concurrently": "^5.3.0", "dotenv": "^8.2.0", "electron": "^9.1.0", "electron-builder": "^22.9.1", "electron-rebuild": "^2.3.2", "wait-on": "^5.2.1" }
}

I'm running the command below:

"deploy": "npm run build && electron-builder build --win --publish always"

The bucket is public. I can't figure out what is going on? I also mentioned aws_access_key_id and aws_secret_access_key in environment variables and ~/.aws/credentials file. But no result.

3 Answers

As per the official documentation, you need to have something like thisS3Options

AWS credentials are required, please see getting your credentials. Define AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables. Or in the ~/.aws/credentials.

 "build": "publish": { "provider": "s3", "bucket": "bucket-name" } }
}

You export secrets into windows environment:

setx AWS_ACCESS_KEY_ID AKIAIOSFODNN7EXAMPLE
setx AWS_SECRET_ACCESS_KEY wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
setx AWS_DEFAULT_REGION us-west-2

You don't have to make the bucket Public unless you want to. Make sure the User's credentials you are using, have the following permissions at least to access the bucket:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectVersion", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::bucketName/*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucketName" } ]
}

On the side note why you are bundling your credentials files

 "./~/.aws/credentials", "~/.aws/credentials",
1

Double-check the format of your ~/.aws/credential file.

For example in the AWS SDK, JavaScript correctly works with uppercase and lowercase params:

[profile]
AWS_ACCESS_KEY_ID=
or
[profile]
aws_access_key_id=

But in the AWS SDK, Go correctly works only lowercase params:

[profile]
aws_access_key_id=
aws_secret_access_key=

Electron-builder used the AWS SDK for Go in deployments.

If you are doing aws sso login --profile abc and face this error you can simply use the profile name in the variable and terraform will use that.

export AWS_PROFILE=abc
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.