func (s *IssuesService) ListIssueTimeline(ctx context.Context, owner, repo string, number int, opt *ListOptions) ([]*Timeline, *Response, error) {
	u := fmt.Sprintf("repos/%v/%v/issues/%v/timeline", owner, repo, number)
	u, err := addOptions(u, opt)
	if err != nil {
		return nil, nil, err
	}
	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}
	acceptHeaders := []string{mediaTypeTimelinePreview, mediaTypeProjectCardDetailsPreview}
	req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
	var events []*Timeline
	resp, err := s.client.Do(ctx, req, &events)
	return events, resp, err
}
ListIssueTimeline lists events for the specified issue.

GitHub API docs: https://developer.github.com/v3/issues/timeline/#list-events-for-an-issue
package github
import (
	"context"
	"fmt"
	"strings"
	"time"
)
type Timeline struct {
	ID        *int64  `json:"id,omitempty"`
	URL       *string `json:"url,omitempty"`
	CommitURL *string `json:"commit_url,omitempty"`
	Actor *User `json:"actor,omitempty"`
	Event *string `json:"event,omitempty"`
	CommitID *string `json:"commit_id,omitempty"`
	CreatedAt *time.Time `json:"created_at,omitempty"`
	Label *Label `json:"label,omitempty"`
	Assignee *User `json:"assignee,omitempty"`
	Milestone *Milestone `json:"milestone,omitempty"`
	Source *Source `json:"source,omitempty"`
	Rename      *Rename      `json:"rename,omitempty"`
	ProjectCard *ProjectCard `json:"project_card,omitempty"`
}
type Source struct {
	ID    *int64  `json:"id,omitempty"`
	URL   *string `json:"url,omitempty"`
	Actor *User   `json:"actor,omitempty"`
}