Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/mobile/cmd/gobind: failing on linux-amd64-longtest builder due to missing module checksums #46418

Closed
bcmills opened this issue May 27, 2021 · 4 comments
Labels
FrozenDueToAge mobile Android, iOS, and x/mobile NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. okay-after-beta1 Used by release team to mark a release-blocker issue as okay to resolve either before or after beta1 release-blocker
Milestone

Comments

@bcmills
Copy link
Contributor

bcmills commented May 27, 2021

2021-02-20T03:30:13-bdb1ca9/linux-amd64-longtest
--- FAIL: TestDocs (0.38s)
    --- FAIL: TestDocs/Modules (0.29s)
        gobind_test.go:173: gobind -lang java failed: exit status 1: // Code generated by gobind. DO NOT EDIT.
            
            // Java class doctest.Doctest is a proxy for talking to a Go program.
            //
            //   autogenerated by gobind -lang=java example.com/doctest
            package doctest;
            
            import go.Seq;
            
            public abstract class Doctest {
            	static {
            		Seq.touch(); // for loading the native library
            		_init();
            	}
            	
            	private Doctest() {} // uninstantiable
            	
            	// touch is called from other bound packages to initialize this package
            	public static void touch() {}
            	
            	private static native void _init();
            	
            	
            	
            }
            // Code generated by gobind. DO NOT EDIT.
            
            // Java class doctest.Struct is a proxy for talking to a Go program.
            //
            //   autogenerated by gobind -lang=java example.com/doctest
            package doctest;
            
            import go.Seq;
            
            /**
             * This is a comment.
             */
            public final class Struct implements Seq.Proxy {
            	static { Doctest.touch(); }
            	
            	private final int refnum;
            	
            	@Override public final int incRefnum() {
            	      Seq.incGoRef(refnum, this);
            	      return refnum;
            	}
            	
            	Struct(int refnum) { this.refnum = refnum; Seq.trackGoRef(refnum, this); }
            	
            	public Struct() { this.refnum = __New(); Seq.trackGoRef(refnum, this); }
            	
            	private static native int __New();
            	
            	@Override public boolean equals(Object o) {
            		if (o == null || !(o instanceof Struct)) {
            		    return false;
            		}
            		Struct that = (Struct)o;
            		return true;
            	}
            	
            	@Override public int hashCode() {
            	    return java.util.Arrays.hashCode(new Object[] {});
            	}
            	
            	@Override public String toString() {
            		StringBuilder b = new StringBuilder();
            		b.append("Struct").append("{");
            		return b.append("}").toString();
            	}
            }
            
            // Code generated by gobind. DO NOT EDIT.
            
            // JNI functions for the Go <=> Java bridge.
            //
            //   autogenerated by gobind -lang=java example.com/doctest
            
            #include <android/log.h>
            #include <stdint.h>
            #include "seq.h"
            #include "_cgo_export.h"
            #include "doctest.h"
            
            jclass proxy_class_doctest_Struct;
            jmethodID proxy_class_doctest_Struct_cons;
            
            JNIEXPORT void JNICALL
            Java_doctest_Doctest__1init(JNIEnv *env, jclass _unused) {
            	jclass clazz;
            	clazz = (*env)->FindClass(env, "doctest/Struct");
            	proxy_class_doctest_Struct = (*env)->NewGlobalRef(env, clazz);
            	proxy_class_doctest_Struct_cons = (*env)->GetMethodID(env, clazz, "<init>", "(I)V");
            }
            
            JNIEXPORT jint JNICALL
            Java_doctest_Struct__1_1New(JNIEnv *env, jclass clazz) {
            	return new_doctest_Struct();
            }
            
            // Code generated by gobind. DO NOT EDIT.
            
            // JNI function headers for the Go <=> Java bridge.
            //
            //   autogenerated by gobind -lang=java example.com/doctest
            
            #ifndef __Doctest_H__
            #define __Doctest_H__
            
            #include <jni.h>
            
            extern jclass proxy_class_doctest_Struct;
            extern jmethodID proxy_class_doctest_Struct_cons;
            #endif
            // Code generated by gobind. DO NOT EDIT.
            
            // Java class go.Universe is a proxy for talking to a Go program.
            //
            //   autogenerated by gobind -lang=java 
            package go;
            
            import go.Seq;
            
            public abstract class Universe {
            	static {
            		Seq.touch(); // for loading the native library
            		_init();
            	}
            	
            	private Universe() {} // uninstantiable
            	
            	// touch is called from other bound packages to initialize this package
            	public static void touch() {}
            	
            	private static native void _init();
            	
            	private static final class proxyerror extends Exception implements Seq.Proxy, error {
            		private final int refnum;
            		
            		@Override public final int incRefnum() {
            		      Seq.incGoRef(refnum, this);
            		      return refnum;
            		}
            		
            		proxyerror(int refnum) { this.refnum = refnum; Seq.trackGoRef(refnum, this); }
            		
            		@Override public String getMessage() { return error(); }
            		
            		public native String error();
            	}
            	
            	
            }
            // Code generated by gobind. DO NOT EDIT.
            
            // Java class go.error is a proxy for talking to a Go program.
            //
            //   autogenerated by gobind -lang=java 
            package go;
            
            import go.Seq;
            
            public interface error {
            	public String error();
            	
            }
            
            // Code generated by gobind. DO NOT EDIT.
            
            // JNI functions for the Go <=> Java bridge.
            //
            //   autogenerated by gobind -lang=java 
            
            #include <android/log.h>
            #include <stdint.h>
            #include "seq.h"
            #include "_cgo_export.h"
            #include "universe.h"
            
            jclass proxy_class__error;
            jmethodID proxy_class__error_cons;
            static jmethodID mid_error_Error;
            
            JNIEXPORT void JNICALL
            Java_go_Universe__1init(JNIEnv *env, jclass _unused) {
            	jclass clazz;
            	clazz = (*env)->FindClass(env, "go/Universe$proxyerror");
            	proxy_class__error = (*env)->NewGlobalRef(env, clazz);
            	proxy_class__error_cons = (*env)->GetMethodID(env, clazz, "<init>", "(I)V");
            	clazz = (*env)->FindClass(env, "java/lang/Throwable");
            	mid_error_Error = (*env)->GetMethodID(env, clazz, "getMessage", "()Ljava/lang/String;");
            }
            
            JNIEXPORT jstring JNICALL
            Java_go_Universe_00024proxyerror_error(JNIEnv* env, jobject __this__) {
            	int32_t o = go_seq_to_refnum_go(env, __this__);
            	nstring r0 = proxy_error_Error(o);
            	jstring _r0 = go_seq_to_java_string(env, r0);
            	return _r0;
            }
            
            nstring cproxy_error_Error(int32_t refnum) {
            	JNIEnv *env = go_seq_push_local_frame(0);
            	jobject o = go_seq_from_refnum(env, refnum, proxy_class__error, proxy_class__error_cons);
            	jstring res = (*env)->CallObjectMethod(env, o, mid_error_Error);
            	nstring _res = go_seq_from_java_string(env, res);
            	go_seq_pop_local_frame(env);
            	return _res;
            }
            
            // Code generated by gobind. DO NOT EDIT.
            
            // JNI function headers for the Go <=> Java bridge.
            //
            //   autogenerated by gobind -lang=java 
            
            #ifndef __Universe_H__
            #define __Universe_H__
            
            #include <jni.h>
            
            extern jclass proxy_class__error;
            extern jmethodID proxy_class__error_cons;
            
            nstring cproxy_error_Error(int32_t refnum);
            
            #endif
            "golang.org/x/mobile/bind" is not found; run go get golang.org/x/mobile/bind: [-: missing go.sum entry for module providing package golang.org/x/mobile/bind; to add:
            	go mod download golang.org/x/mobile]
        gobind_test.go:173: gobind -lang objc failed: exit status 1: // Objective-C API for talking to example.com/doctest Go package.
            //   gobind -lang=objc example.com/doctest
            //
            // File is generated by gobind. Do not edit.
            
            #ifndef __GO_doctest_H__
            #define __GO_doctest_H__
            
            #include <stdint.h>
            #include <objc/objc.h>
            #endif
            // Objective-C API for talking to example.com/doctest Go package.
            //   gobind -lang=objc example.com/doctest
            //
            // File is generated by gobind. Do not edit.
            
            #ifndef __Doctest_H__
            #define __Doctest_H__
            
            @import Foundation;
            #include "ref.h"
            #include "Universe.objc.h"
            
            
            @class DoctestStruct;
            
            /**
             * This is a comment.
             */
            @interface DoctestStruct : NSObject <goSeqRefInterface> {
            }
            @property(strong, readonly) _Nonnull id _ref;
            
            - (nonnull instancetype)initWithRef:(_Nonnull id)ref;
            - (nonnull instancetype)init;
            @end
            
            #endif
            // Objective-C API for talking to example.com/doctest Go package.
            //   gobind -lang=objc example.com/doctest
            //
            // File is generated by gobind. Do not edit.
            
            #include <Foundation/Foundation.h>
            #include "seq.h"
            #include "_cgo_export.h"
            #include "Doctest.objc.h"
            
            
            @implementation DoctestStruct {
            }
            
            - (nonnull instancetype)initWithRef:(_Nonnull id)ref {
            	self = [super init];
            	if (self) { __ref = ref; }
            	return self;
            }
            
            - (nonnull instancetype)init {
            	self = [super init];
            	if (self) {
            		__ref = go_seq_from_refnum(new_doctest_Struct());
            	}
            	return self;
            }
            
            @end
            
            
            
            __attribute__((constructor)) static void init() {
            	init_seq();
            }
            // Objective-C API for talking to  Go package.
            //   gobind -lang=objc 
            //
            // File is generated by gobind. Do not edit.
            
            #ifndef __GO__H__
            #define __GO__H__
            
            #include <stdint.h>
            #include <objc/objc.h>
            nstring cproxy_error_Error(int32_t refnum);
            
            #endif
            // Objective-C API for talking to  Go package.
            //   gobind -lang=objc 
            //
            // File is generated by gobind. Do not edit.
            
            #ifndef __Universe_H__
            #define __Universe_H__
            
            @import Foundation;
            #include "ref.h"
            
            @protocol Universeerror;
            @class Universeerror;
            
            @protocol Universeerror <NSObject>
            - (NSString* _Nonnull)error;
            @end
            
            @class Universeerror;
            
            @interface Universeerror : NSError <goSeqRefInterface, Universeerror> {
            }
            @property(strong, readonly) _Nonnull id _ref;
            
            - (nonnull instancetype)initWithRef:(_Nonnull id)ref;
            - (NSString* _Nonnull)error;
            @end
            
            #endif
            // Objective-C API for talking to  Go package.
            //   gobind -lang=objc 
            //
            // File is generated by gobind. Do not edit.
            
            #include <Foundation/Foundation.h>
            #include "seq.h"
            #include "_cgo_export.h"
            #include "Universe.objc.h"
            
            @implementation Universeerror {
            }
            
            - (nonnull instancetype)initWithRef:(id)ref {
            	if (self) {
            		__ref = ref;
            		self = [super initWithDomain:@"go" code:1 userInfo:@{NSLocalizedDescriptionKey: [self error]}];
            	}
            	return self;
            }
            
            - (NSString* _Nonnull)error {
            	int32_t refnum = go_seq_go_to_refnum(self._ref);
            	nstring r0 = proxy_error_Error(refnum);
            	NSString *_ret0_ = go_seq_to_objc_string(r0);
            	return _ret0_;
            }
            
            @end
            
            
            
            nstring cproxy_error_Error(int32_t refnum) {
            	@autoreleasepool {
            		Universeerror* o = go_seq_objc_from_refnum(refnum);
            		NSString* _Nonnull ret0_;
            		ret0_ = [o localizedDescription];
            		nstring _ret0_ = go_seq_from_objc_string(ret0_);
            		return _ret0_;
            	}
            }
            
            __attribute__((constructor)) static void init() {
            	init_seq();
            }
            unable to import bind/objc: [-: missing go.sum entry for module providing package golang.org/x/mobile/bind/objc; to add:
            	go mod download golang.org/x/mobile]
FAIL
FAIL	golang.org/x/mobile/cmd/gobind	17.634s

The first failure was at CL 318629, which seems closely related to the failure mode (CC @jayconrod @matloob).

@gopherbot gopherbot added the mobile Android, iOS, and x/mobile label May 27, 2021
@gopherbot gopherbot added this to the Unreleased milestone May 27, 2021
@bcmills
Copy link
Contributor Author

bcmills commented May 27, 2021

(This is a release-blocker for Go 1.17 via #11811.)

@bcmills bcmills modified the milestones: Unreleased, Go1.17 May 27, 2021
@bcmills bcmills added okay-after-beta1 Used by release team to mark a release-blocker issue as okay to resolve either before or after beta1 release-blocker NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. labels May 27, 2021
@bcmills
Copy link
Contributor Author

bcmills commented May 27, 2021

@hyangah, do these tests explicitly use go mod download to populate checksums?

@jayconrod
Copy link
Contributor

It looks like they use go mod download via golang.org/x/tools/go/packages/packagestest. I fixed that in CL 318811. Maybe just updating the golang.org/x/tools dependency will fix the tests? I'll put together a CL.

@gopherbot
Copy link

Change https://golang.org/cl/323149 mentions this issue: all: update golang.org/x/tools to v0.1.2

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge mobile Android, iOS, and x/mobile NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. okay-after-beta1 Used by release team to mark a release-blocker issue as okay to resolve either before or after beta1 release-blocker
Projects
None yet
Development

No branches or pull requests

3 participants