►
From YouTube: S307 - Building your Open Source projects with Azure Pipelines and Azure - Edward Thomson
Description
GitHub is the home for millions of developers to host and review code, manage projects and much more. In this demo heavy session, you'll learn how to build your .NET open source projects using a Continuous Integration (CI) pipeline powered by Azure Pipelines using our cloud-hosted Windows, Linux and Mac build agents for any app type you're targeting.
A
A
A
C
Hello
net
con
good
morning
or
good
afternoon
or
good
evening,
it's
the
great
thing
about
a
virtual
conference.
You
can
join
from
wherever
you
are
I'm
here
in
England
today.
My
name
is
Edward
Thompson
and
I'd
like
to
talk
to
you
about
the
intersection
of
two
of
my
favorite
things:
building
your
open-source
project
with
Azure
pipelines
going
to
share
my
slides
with
you.
C
There
we
go
so
why
are
these
two
of
my
favorite
things?
Well,
let
me
tell
you
just
a
little
bit
about
myself
real
quick
again.
My
name
is
Edward
Thompson
I'm,
a
program
manager
at
Microsoft,
I
work
on
the
Asscher
DevOps
team
and
I
focus
on
two
main
areas
of
of
that
product:
Azure
repose,
which
is
our
git
repository
hosting
and
Azure
pipelines,
which
is
our
continuous
integration
and
continuous
delivery
platform.
C
That's
what
I
do
during
the
day,
but
by
night
I'm.
Actually,
the
maintainer
of
a
couple
of
open
source
projects,
I
maintain
an
open
source
project
called
Lib
get
2
and
another
one
called
lib
get
to
sharp
Luca
2
is
actually
AC
library
that
that
does
get
repository
management,
so
it
actually
works
on
the
low
level
of
your
git
repository
and
it's
used
by
people
like
github
and
Azure
repos.
C
So
it's
very
important
to
me
that
we
use
something
like
Azure
pipelines
to
manage
that
so
I'll
show
you
more
about
that
in
a
minute.
The
other
project
I
manage
is
called
Libya
to
sharp
look
at
you
as
a
sea
library
litigate
to
sharp
is
the
dotnet
library
that
sits
on
top
of
that,
and
so
we
use
that
within
Microsoft,
so
that
we
can
make
sure
that
we
use
the
the
dotnet
version,
because
many
of
our
products
are
written
in
net
as
you
as
you
can
probably
imagine
so
again.
C
I'm
a
the
program
manager
for
our
program
manager
for
a
product
called
asier
DevOps.
You
may
not
have
heard
of
Asher
DevOps
before
it's
new
as
of
this
week
as
your
DevOps
is
the
the
next
evolution
of
a
product
that
you
may
have
heard
of
called
visual
studio
team
services
and
the
great
thing
about
visual
studio
team
services
was
that
we
have
all
of
this.
C
These
tools
to
help
you
manage
your
software
project
so
beginning
with
Angela
planning,
taking
the
requirements
setting
up
the
the
work
that
you
are
intending
to
do
for
the
next
sprint,
git
repository
hosting
to
actually
host
your
code
and
then
moving
into
a
build
and
test
pipeline
to
get
your
code
into
onto
the
into
production.
Whether
that's
a
cloud
offering
like
Asscher
or
another
cloud
provider
or
onto
your
on-premises
servers,
so
visual
studio
team
services
was
this
great
set
of
products.
C
But
a
lot
of
people
are
coming
into
software
development
with
other
tools,
perhaps
you're
using
JIRA
for
requirements,
management,
perhaps
you're
using
github
to
host
your
git
repositories,
and
so
the
idea
behind
Azure
DevOps
is
to
take
these
tools
and
actually
break
them
apart
into
individual
components,
so
that
you
can
adopt
just
the
tools
that
that
you
need,
if
you're
happy
with
github.
That's
fine,
that's
great!
You
still
need
a
proper
CI
CD
pipeline,
and
so
you
can
adopt
Azure
pipelines,
which
is
the
build
and
release
portion
of
Azure
DevOps.
C
C
Again,
that
is
the
continuous
integration
build
and
deployment
aspect
of
Azure
DevOps
and
Azure
pipelines
is
incredibly
powerful
because
it
is,
it
enables
any
language
on
any
platform,
so
we
actually
provide
you
with
cloud,
hosted,
build
agents,
running
Linux,
Windows
and
Mac
OS
and
that's
available
for
everyone,
whether
you're
an
enterprise
project
or
an
open
source
project,
but
we
have
some
really
amazing
offers
for
open-source
developers.
We
actually
provide
unlimited,
build
minutes
for
open
source
projects,
so
you
can
use
this
to
validate
pull
requests.
C
You
can
use
this
to
continue
to
to
build
the
master
branch
in
a
continuous
integration
fashion.
Every
time
something
gets
merged
in
a
master,
you
can
perform
a
build
and
you
can
do
that
for
free
with
unlimited
build
minutes
across
our
cloud
hosted
pool
of
machines,
you
get
ten
pipelines
in
parallel,
so
it's
it's
actually
the
most
generous
offer
for
continuous
integration
for
open
source
right
now,
we're
incredibly
proud
to
be
able
to
offer
it,
and
we
are
we're
hoping
that
open
source
projects
will
take
advantage
of
it
again.
C
I'm
taking
advantage
of
it
with
mine.
I'm,
incredibly
excited
to
be
able
to
do
so.
I'll
talk
more
about
that
in
a
minute,
though,
the
other
thing
that
we
have
launched
with
Azure
DevOps
is
a
new
integration
with
github
we're
actually
in
the
github
marketplace
now,
so
you
can
adopt
Azure
pipelines
just
by
just
by
going
to
the
github
marketplace
and
clicking
a
few
buttons.
C
It's
really
super
easy
to
get
started,
and
it's
in
fact
so
easy
that
we've
seen
a
number
of
open
source
projects
adopt
Azure
pipelines,
so
the
dotnet
foundation
has
has
made
a
push
to
to
adopt
agile
pipelines
for
many
of
the
projects,
and
this
is
due
in
large
part
to
Oran
Novotny.
So
thanks
Oren
for
for
helping
out
here,
so
we've
seen
reactive,
UI
and
reactive
extensions
are
now
using
Azure
pipelines.
Cake
is
using
Azure
pipelines.
C
The
cake
build
system,
nougat
package,
Explorer
net
new
Visual
Studio
code,
are
all
using
Azure
pipelines
and
I
I'm
using
it
as
well.
I'm
very
excited
about
this,
because
so
many
of
these
projects
have
such
different
requirements
that
getting
them
all
into
Azure
pipelines
was
was
challenging,
but
also
exciting
and
incredibly
powerful.
C
Right
so
here
I
have
my
open
source
project.
This
is
Lib,
get
to
sharp
again.
This
is
the
dotnet
wrapper
around
lib,
get
to
and
I
just
want
to
scroll
down
a
little
bit.
Here
we
go
so
here
in
my
readme
for
Libya
to
sharp.
You
can
see
that
I
have
a
number
of
these
build
badges.
This
is
the
first
one
right
here
with
the
little
cute
little
rocket
ship
that
is
Azure
pipelines
and
so
I'm
building
the
master
branch.
C
This
is
showing
the
the
results
of
the
most
recent
merge
into
master
for
this
project
and
that
the
build
has
succeeded.
You
can
also
see
that
I've
got
a
couple
of
other
badges
here,
so
this
is
an
important
aspect
of
managing
open
source
projects.
You
might
not
want
to
rely
only
on
a
single,
continuous
integration
service
and
that's
that's
totally
fine.
You
don't
need
to
get
rid
of
whatever
CI
systems
you
already
have,
if
you're
using
say
app
there
or
Travis
already,
you
don't
have
to
get
rid
of
those.
C
If
you
want
to
think
about
adopting
a
sure
pipelines,
you
can
just
bring
that
into
the
mix
as
well.
So
for
the
philosophy
behind
this
project
right
here
look
good
too
sharp.
We
want
as
much
coverage
as
is
possible,
so
we
want
to
build
and
test
on
a
number
of
platforms,
so
we
have
before
Azure
pipelines.
We
had
just
out
there
and
Travis
two
good
systems
and
we
added
as
your
pipelines
to
the
mix
to
give
us
a
third
system.
C
So
if
you
already
have
a
CI
system
for
your
project,
I
would
still
recommend
giving
as
your
pipelines
a
look
perhaps
getting
it
set
up.
It's
very
easy
to
get
started
it's
free,
so
there's
no
reason
not
to
do
that
and
that
that
just
gives
you
another
bit
of
coverage.
So
that
is
something
that
we
do
on
lib
get
too
sharp.
That's
also
something
that
the
cake
build
system
does.
If
we
go
over
to
cake
this
is
their
open-source
project.
It's
hosted
out
on
github,
as
you
would
imagine.
C
If
we
look
at
the
pull
requests
so
for
lib,
get
su
sharp
I
was
showing
the
build
badge
for
master,
showing
the
most
recent
build
of
the
master
branch
would
have
been
merged,
and-
and
that's
great,
you
always
want
to
make
sure
that
your
master
branch
is
building.
That's
an
important
consideration
for
contributors,
but
the
other
thing
that
you
want
to
do
for
contribution
is
to
build
pull
requests.
C
So,
if
I
have
somebody
contributing
to
my
project,
let's
say
somebody
finds
a
bug
in
my
open
source
project
where
perhaps
they
want
to
add
a
new
feature.
My
project
doesn't
do
something
that
they
want
it
to
do.
They
can
contribute
a
pull
request
with
some
code
changes
and
you'll
see
that
that
that's
very
common
in
an
open
source
workflow.
You
see
that
there
are
several
pull
requests
for
the
cake
project
here,
and
so
these
are
all
various
people
contributing
changes
back
to
the
project.
Let's,
let's
go
ahead
and
just
click
on
one
okay.
C
So
here
we
can
of
course
look
at
the
the
changes
that
are
being
committed
proposed.
It's
one
commit
changing
six
files,
but
what
we
really
want
to
do
is
scroll
down,
because
here
our
checks
on
the
full
request.
So
what
we
can
integrate
here
is
different.
Continuous
integration
providers
like
asher
pipelines
to
validate
this
pull
request
to
make
sure
that
it
builds
to
make
sure
that
it's
the
tests
pass,
and
so
this
is
incredibly
important
to
get
a
feel
for
the
quality
of
a
change
of
a
pull
request.
C
That's
coming
in
and
cake
actually
has
11
checks
running
on
their
pull
requests,
let's
expand
them
just
to
say,
look
and
Wow.
This
is
this
is
really
wild.
So
if
we,
if
we
scroll
through
here,
we
see
a
bunch
of
different
Azure
pipeline's
builds
they're
building
on
Sint
OS,
debian
fedora
Mac
upon
2,
we
haven't
even
gotten
to
a
Windows
build
yet
there's
the
windows
build,
but
they're
also
likely
to
get
to
sharp
they're,
also
not
just
using
Azure
pipelines
they're,
also
using
a
number
of
CI
providers.
C
For
these
different
CI
systems,
since
they're
used
to
build
projects,
they
need
to
understand
the
context
in
which
they're
running
so
they
may
behave
a
little
bit
differently
running
in
Azure
pipelines
versus
a
different
CI
provider,
and
certainly
they
may
behave
a
little
bit
differently
depending
on
the
the
platform.
That's
why
you'll
see
Windows
here,
a
bun
two
Mac
OS,
and
so
the
cake
project
is
really
taking
advantage
of
everything
that,
as
your
pipelines
has
to
offer.
So
this
is.
This
is
really
exciting.
C
I
mentioned
that
I
work
on
live,
get
to
sharp
Libby
to
sharp
is
the
dotnet
wrapper
on
top
of
AC
library
live
get
to,
and
so
we
use
Azure
pipelines
on
the
lib
get
to
side
as
well.
So
it's
it's
perfectly
perfectly
workable
to
build
your
see,
applications
as
well
as
net.
Of
course
it
could.
We
can
build
anything,
really
Java
Ruby
on
Rails
nodejs,
but
here
we
have
an
example
of
sort
of
a
entire
architecture
where
you
have
net
on
top
of
AC
library,
and
so
again
in
my
readme
I've
got
my
build
badges.
C
You
can
see
here
this
cute
little
rocket
ship.
That
is
my
that
is
my
as
your
pipelines
build
for
lib
get
to
and
unlike
live
get
to
sharp,
where
we
have
multiple
CI
providers
or
cake
where
they
have
multiple
continuous
integration
builds
set
up.
Lib
get
to
actually
only
has
the
one.
We
only
use
Azure
pipelines
for
Libya
two.
We
also
have
a
system
called
Coverity
setup
that
is
actually
triggered
by
major
pipelines
to
do
some
static
code
analysis
for
us,
but
the
builds
themselves.
C
C
We
have
a
lot
of
targets
for
lipcott
too,
and
the
reason
that
we
adopted
as
your
pipelines
as
our
only
CI
provider,
was
because
it's
the
only
one
that
will
bring
us
cloud,
hosted:
Mac,
OS,
Windows
and
Linux,
build
agents
that
we
don't
have
to
manage.
So
this
was
a
big
win
for
us
to
be
able
to
just
consolidate
on
a
single
CI
provider
that
simplified
our
set
up
considerably.
C
So
so
we're
very
excited
to
have
that,
and
you
can
see
that
we
have
a
number
of
builds
on
a
number
of
different
architectures
Linux
Mac,
OS
Windows,
with
different
compilers
and
different
library
options,
and
so
that
makes
us
very
confident
when
we
make
a
change
to
Lib
get
to
and
again.
Oh,
there
are
a
lot
of
developers
using
lib
get
to
behind
the
scenes.
C
So
the
other
interesting
thing
about
Azure
pipelines
is
not
just
that
it
supports
Linux,
Mac
and
Windows.
It
actually
does
so
by
providing
you
virtual
machines
to
do
your
builds.
Some
CI
providers
offer
you
docker
images
in
the
cloud
building
inside
a
docker
container,
as
your
pipelines
actually
provides
you
with
virtual
machines.
The
reason
that's
interesting
is
because
you
don't
have
to
limit
yourself
necessarily
to
Linux
Mac
and
Windows.
C
If
you
wanted
to
say
start
some
virtualization,
you
could
run
other
architectures,
so
combining
soccer
with
QEMU
the
QEMU
emulator,
you
are
able
to
get
started
with
perhaps
other
architectures.
This
is
a
pull
request
that
I'm
working
on
you
can
see.
It's
not
done!
You
can
see
this
big
red
X
tells
me
not
to
merge
anything
because
it's
not
building
and
the
tests
aren't
passing
it's
something
I'm
working
on,
which
is
to
bring
other
architectures
into
our
build
pool.
So
here
I've
got
arm
32
and
arm
64.
C
Here
I've
got
PowerPC
64,
so
your
the
the
power
of
Azure
pipelines
is
giving
you
a
virtual
machine
that
you
can
use
for
for
anything,
including
virtualizing
other
architectures.
So
we're
really
excited
to
be
able
to
expand
our
platform
support
even
wider
than
what
we
expected
so
as
your
pipelines
is
incredibly
powerful
for
that,
obviously
we're
not
quite
there
yet,
but
we're
getting
close.
So
those
are
three
projects
that
are
using
Azure
pipelines.
C
Why
don't
we
take
a
look
at
how
easy
it
is
to
actually
get
started
for
your
project,
so
here
I've
got
there
we
go
here.
We
a
very
simple
project.
It's
called
hex
dump,
one
of
the
things
that
I
do
I
spend
a
lot
of
time
again.
Working
on
sort
of
low-level
bits
and
git
repositories,
and
most
of
gets
metadata
is
actually
text
files.
It's
great,
maybe
they're
compressed,
maybe
they're
in
a
different
format,
but
some
of
them
are
not.
C
Some
of
them
are
actually
binary,
and
so
I
wrote
this
little
app
to
be
able
to
help
me
work
with
them.
It's
a
dotnet
framework,
app
that
emulates.
The
command-line
hex
dump
tool
that
comes
with
BST.
That's
how
I
grew
up,
that's
what
I'm
familiar
with
and
that's
what
I
want
to
be
able
to
analyze
a
binary
file
ein
I,
know,
that's
crazy,
but
it's
what
I
wanted
and
so
moving
over
to
Windows
I
wanted
to
be
able
to
run
that
so
I
built
this
little
this
little
tool
to
help
me.
Do
it.
C
So
it's
again
very
straightforward:
it's
just
a
a
handful
of
c-sharp
classes,
super
straightforward.
What
it
doesn't
have
is
any
sort
of
build
associated
with
it
right
now.
So
it's
out
on
github.
It
is
open
sourced
I've
got
this
license
right
here.
It's
the
MIT
license
telling
people
that
they
can
contribute,
but
what
it
doesn't
have
is
any
sort
of
way
for
me
to
know.
If
somebody
does
want
to
open
a
pull
request,
maybe
they
want
to
emulate
as
a
slightly
different
mode.
C
It's
slightly
different
output
that
they're
more
comfortable
with
they
could
make
those
changes,
send
a
pull
request
and
I
would
have
no
idea
if
it
even
built.
You
know
I
could
I
wall
it,
but
you
know
I
might
miss
a
typo.
I
could
download
it
to
my
local
machine
and
build
it
locally
test
it
locally.
But
what
I
really
want
to
do
is
be
able
to
see
right
from
the
github
pull
request
page.
C
What
the
status
of
that
build
is.
So
it's
very
easy
for
me
to
get
started
with
Azure
pipelines
here,
to
validate
pull
requests
and
to
perform
continue.
Integration
builds
on
the
master
branch.
I
can
get
started
right
from
the
github
marketplace.
That's
up
here
at
the
top
in
the
black
banner
along
github.com,
so
I'm,
just
gonna
click
on
marketplace
and
I'm
gonna
scroll
down
to
continuous
integration
inside
that
category.
C
C
What
I've
done
is
I've
actually
got
an
organization
set
up
on
github
that
I
want
to
install
this
marketplace
app
into
and
so
again
totally
free
for
open
source
projects
gives
you
all
the
information
about
that,
and
once
I've
read
that
I
can
just
click
install
for
free
and
I
can
change
where
I
want
to
install
it
to
I've
already
installed
it
on
my
personal
account
I've
already
installed
it
on
Libya
too,
as
you
saw,
but
I've
got
a
number
of
other
accounts
and
I'm
going
to
select
this
one.
It
Thompson
dotnet
cons
there.
C
We
go
I
created
this
organization
just
for
y'all,
so
when
I
click
complete
order
and
begin
installation,
I
need
to
select
which
repositories
I
want
to
start
building.
I
want
to
do
one
at
a
time,
and
we
started
out
on
that.
Hex
dump
application,
so
I'll
click
install
I
need
to
authenticate
to
github
to
make
sure
that
that
I'm,
allowing
it
to
have
access
to
that
repository
and
then
Angier
DevOps
will
set
me
up
with
a
new
project.
C
I've,
of
course,
got
a
few
projects
already,
but
I
wanted
to
log
in
with
a
different
Microsoft
account.
So
this
is
I've,
never
logged
into
Azure
DevOps
with
that
account
before.
So
what
it's
going
to
do
is
it's
going
to
create
me
a
whole
new,
a
sure,
DevOps
project
for
my
pipeline.
You
can
see
it's
called
ETOPS
and
Netcom.
So
that's
what
a
great
name
so
the
first
thing
I
need
to
do
to
get
started.
Building.
My
repository
is
to
select
it
again.
I
only
gave
as
your
pipelines
this
access
to
that
one
repository.
C
So
that's
the
only
one
you
see
here
had
I
selected
all
repositories
earlier,
you'd
see
the
list,
so
I'll
just
click
on
that
and
then,
as
your
pipeline's
will
actually
analyze
my
project,
it
will
look
at
it
on
github
and
try
to
decide
what
kind
of
project
is
being
built
in
this
case.
It's
a
dotnet
framework
project,
and
so
it's
it's
recommending
this.
This
set
of
build
steps
for
me.
If
I
were
building
a
nodejs
project,
it
would
look
for
maybe
a
package.json
or
something
and
and
suggest
that
it
filled
with
NPM.
C
If
I
had
a
see
make
list
file,
then
maybe
it
would
try
to
build
a
scenic.
So
all
of
these
smarts
are
built
into
Azure
pipelines.
To
know
what
kind
of
projects
you
might
be
building
and
to
suggest
a
template
for
you.
So
let
me
click
on
the
dotnet
template
and
you
can
see
this
is
a
gamal
file
that
describes
the
build
it'll.
Do
some
nougat
restoration
it'll
run,
build
and
then
it'll
run
tests
very
straightforward
if
you're
not
familiar
with
yeah
Mille.
This
is
basically
a
simple
description
of
how
the
build
should
be
performed.
C
C
The
important
thing
here
is
that
this
yeah
Mille
gets
checked
in
to
your
repository
right
along
side,
your
code,
so
that's
very,
very
important.
It's
an
idea
called
configuration
as
code,
so
I
think
that
we've
all
worked
on
projects
where
you're
changing
some
code,
you're
changing
some
code,
and
then
you
need
to
change
the
way
that
the
build
works
to
accommodate
the
Changez.
So
you
change
your
bill
definition.
Then
you
change
your
bill
definition
a
little
bit
more,
but
sometimes
you
need
to
be
able
to
go
back
to
previous
versions
of
the
code.
C
When
you
check
in
your
build
configuration
now
when
I
go
back
to
that
previous
version
of
the
code,
I'll
go
back
to
the
same,
the
same,
build
definition
that
originally
built
that
code.
So
it's
incredibly
important
to
have
these
two
side-by-side
so
that
you
can
always
know
what
and
how
the
build
needs
to
be
performed
for
the
particular
code
that
you
have
checked
out.
It's
very,
very
powerful,
so
I
very
much
encourage
you
to
use
this
yeah
Mel
configuration,
and
so
when
I
click
save
and
run.
This
will
actually
check
this.
C
In
to
my
git
repository
on
github
I
could
create
a
pull
request
and,
of
course,
pull
requests
are
always
a
best
practice.
It
lets
your
collaborators,
see
what
you're
doing
and
allow
them
to
comment
on
it
and
to
actually
have
a
dry
run
of
things
before
things
actually
get
checked
into
the
master
branch,
but
hey
it's
a
demo,
so
I'm
gonna,
I'm
gonna,
skip
over
best
practices
for
now
and
commit
it
right
into
the
master
branch
of
my
github
repository
when
I
do
that
it
will
kick
off
a
new
build.
C
So
it's
going
to
configure
it.
You
can
see
this
little
cursor
right
here.
It's
actually
uploading
that
change
to
github.
Now
it
is
looking
for
a
build
agent
again.
We
have
hosted
build
agents
in
Azure
for
Linux
for
Windows
and
Mac
OS.
So
it's
going
to
find
one
of
those
available
virtual
machines.
It's
going
to
reserve
it
for
you
and
then
it's
going
to
start
the
build
it's
going
to.
You
can
actually
watch
I
love,
I,
love
watching
my
builds,
especially
when
there's
when
I'm
making
some
change
that
I'm
really
excited
about.
C
So
when
I'm
about
to
land
or
really
big,
pull
request,
I
will
just
watch
the
build
anxiously.
So
the
first
thing
it
does
is
gets
the
sources.
So
it's
going
to
clone
your
repository
from
github
and
it's
going
to
do
the
new
get
restore.
Then
it's
going
to
run
a
build
and
then
it's
going
to
run
a
test.
C
Well,
it
does
that
I'm
actually
going
to
switch
back
to
my
github
repository.
We
can
take
a
look
while
it's
doing
that
build
it'll
only
take
a
minute,
but
we
can
take
a
look
at
the
demo
file
that
it
created.
So
I
can
actually
just
click
on
my
repository
right
there
to
go
back
to
github
and
you
can
see
again.
The
azure
pipeline's
bot
has
set
up
a
sharp
eye
planes.
C
Pardon
me
if
I
click
on
commits
I
can
see
exactly
what
it
did
there
we
go
and
again
this
is
the
Hamel
file
that
we
saw.
We
could
have
changed
it
while
it
was
while
it
was
doing
that
we
could
have
made
some
some
custom
steps,
but
I
think
it's
easier
to
always
start
from
a
solid
base
using
the
template
just
to
make
sure
that
it
works
for
you
before
you
start
customizing
it.
C
Okay.
If
we
go
back,
let's
take
a
look
at
how
our
build
is
doing
so.
Here's
the
the
nice
thing
about
the
azure
pipeline's
integration
with
github
is
that
you
get
this
rich,
build
status,
integration
right
into
github
itself,
so
I
get
this
yellow
this
yellow
circle
that
says
it's
the
build
is
pending
and
if
I
click
on
that,
it
actually
takes
me
to
the
check
to
show
me
more
information
about.
C
What's
going
on
and
I
can
view
more
information
on
Azure
pipelines,
so
I
can
open
that
up
and
github
will
take
me
right
to
the
build
that's
in
progress.
It's
still
going.
I
actually
have
some
tests
that
are
being
run,
so
you
can
see
that
build,
succeeded,
it's
starting
the
tests
and
those
all
passed,
and
there
we
go.
That's
everything
so
now
that
blue
button
has
turned
to
green,
indicating
that
my
build
was
successful
and
all
my
tests
pass.
C
C
I
want
to
change
that
I
want
to
I
want
to
provide
some
sort
of
some
sort
of
indication
for
people
who
visit
my
repository
that
that
I'm,
using
best
practices
by
using
a
continuous
integration,
build
for
my
for
my
master
branch
and
pull
request,
validation
as
well
and
again
the
way
that
open
source
projects
commonly
do
that
is
by
adding
that
build
badge
right
here
on
the
front
page,
you
saw
that
with
live,
get
too
sharp.
You
saw
that
with
lipcott.
We
can
do
that
for
even
this.
C
C
If
I
go
to
my
builds
view,
this
will
show
me
all
the
builds
that
have
succeeded,
or
rather
all
the
bills
that
have
been
attempted
for
my
project.
There's
only
the
one
so
far,
despite
that,
what
I
can
do
is
click
this
ellipses
right
here
and
I
can
come
down
to
status
badge.
So
all
I
have
to
do.
Is
click
right
there
and
it
will
show
me
exactly
what
I
need
to
do
to
add
this
status
badge
to
my
repository
I
can
either
link
right
to
the
image
or
I
can
actually
get
marked
down.
C
C
Try
to
get
that
image
loading
correctly,
try
that
again
and
again
preview
those
changes
there
we
go.
It
took
just
a
second
to
load
that
up
and
once
I'm
happy
with
that.
I
can
commit
them
to
my
repository
great
and
now
this
time
I
want
to
start
a
pull
request,
so
I'm
going
to
go
ahead
and
click
propose
file
change
instead
of
commit
directly
to
master
again.
I
want
to
use
best
practices
as
I'm,
trying
to
indicate
to
people
that
my
project
does
use
best
practices.
C
I
want
to
actually
do
that,
so
I'll
click
create
pull
request,
and
now
the
cool
thing
about
this
is
that
you'll
actually
see
this
field
right
here
load
there
it
is
so
what
happens?
Is
that
every
time
a
new
pull
request
is
opened,
github
communicates
that
information
to
Azure
pipelines,
Azure
pipelines
will
start
a
build
to
validate
this
pull
request.
So
that's
that's
really
great.
This
is
a
simple
one,
admittedly
very
straightforward,
just
adding
this
this
build
badge
and
we
can
of
course
just
view
over
to
it
and
view
the
changes
yep
there.
C
We
go
looks
good
to
me
so
in
this
sort
of
an
example
we
might
want
to
skip
the
continuous
integration
build,
so
I'm
gonna
go
ahead
and
merge
the
pull
request
there
we
go,
and
so
now,
if
I
go
to
my
projects,
front
page
and
scroll
down
there,
we
go.
We
see
that
nice
build
badge
telling
us
that
our
master
branch
builds
our
passing
and
our
tests
are
passing
for
this
project.
C
So
that's
great,
but
again
we're
really
worried
about
best
practices
here,
and
maybe
it
wasn't
so
great
that
I
just
kind
of
merged
that
pull
request
without
actually
letting
the
continuous
integration
build
finish
so
that
I
knew
that
it
was
safe.
Well,
that's
actually
another
very
powerful
integration
between
github
and
Azure
pipelines
is
you
can
enforce
that
the
builds
complete
for
a
pull
request
and
in
fact
completes
successfully
and
that
the
tests
pass
before
a
pull
request
can
get
merged.
Let's
take
a
look
at
that.
C
If
I
go
to
the
settings
for
this
project
and
select
branches,
I
can
add
what
are
called
branch
protection
rules.
Branch
protection
rules,
keep
your
master
branch
healthy,
so
I
want
to
add
a
rule.
I
want
to
apply
this
rule
to
the
master
branch.
I
could
actually
use
a
wild
card
here.
I
could
apply
it
to
all
branches,
but
in
this
case
I
really
only
want
to
apply
it
to
the
to
the
master
branch,
so
I
can
require
that
polar
requests
are
approved
before
merging.
C
But
more
interestingly,
since
it's
only
me
on
the
project
right
now,
I
would
be
the
only
approver.
So
I
don't
want
to
add
that
one.
What
I
do
want
to
add
is
that
status
checks
must
succeed
before
a
pull
request
can
get
merged.
So
I'm
going
to
check
that
and
then
I
have
a
number
of
or
I
could
have
a
number
of
status
checks.
I
only
have
the
one
so
far,
and
that
is
my
Asher
pipelines
bill.
So
I
want
to
check
that
that
is
now
required.
C
C
C
It's
very
straightforward,
but
one
of
the
things
that
it
does
that's
a
little
bit
interesting
is
it
allows
you
to
skip
to
a
certain
part
of
the
file,
and
so
it
does
that
by
using
the
standard
stream,
dot
seek
function,
but
there's
something
interesting
about
dotnet
stream
class,
and
that
is
that
it
doesn't
have
to
implement
a
Seikh.
But
since
we
only
ever
seek
forwards,
we
can
wrap
a
system
stream
with
our
own
stream.
We
call
it
a
forward
seeking
stream
and
we
can
just
read
those
bytes
and
throw
them
away.
C
Instead,
it's
not
as
efficient,
but
it
does
get
the
job
done,
and
so
we
have
some
tests
here
to
make
sure
that
we
understand
how
that
works.
We
create
a
simple
buffer
with
five
bytes
in
it.
We
seek
forward
by
two
bytes.
We
read
three
bytes
and
then
we
validate
that
these
last
three
bytes
here
are
the
last
three
bytes
here
very,
very
straightforward
right.
C
And
I'm
gonna
propose
it
sometimes
as
an
open-source
maintainer,
you
get
changes,
not
a
lot
of
context,
so
this
is
one
of
those
you
look
at
it
and
you're
like
well.
I.
Don't
really
understand
why
why
this
change
was
made,
that's
very
frustrating
right.
So,
let's
emulate
that
sort
of
a
workload.
So
I'm
gonna
go
ahead
and
create
a
new
branch.
You
notice
that
this
is
actually
locked
out
for
me.
I
can't
commit
straight
to
master,
even
as
an
administrator
I
can't
commit
straight
to
master.
C
C
So
we'll
create
that
pull
request
and
again
just
like
before
you'll
see
that
the
status
checks
go
here.
The
yellow
circle
indicates
that
they're
being
executed.
So
it's
a
talked
to
Azure
pipelines,
starting
that
build
and
if
I
click
on
details,
it'll
take
me
to
more
information
about
the
check
and
I
can
click
to
open
in
Azure
pipelines,
because
again,
I
really
I
really
do
just
get
a
kick
out
of
watching
this
build
output
scroll
by
ok,
so
that'll
take
just
a
minute
to
do
that.
C
B
A
A
C
I
would
go
to
the
so
I
the
the
best
way.
The
thing
that
I
like
to
do
is
to
actually
look
at
examples
of
real-life
builds.
For
example,
you
can
pull
up
lib
get
to
again.
We've
got
a
number
of
architectures
and
we're
using
this
yellow
right
here,
and
so
it's
doing
some
interesting
things
like
using
templates
and
running
a
mix
of
docker
and
actual
on
host
builds.
C
So
I
would
actually
look
through
the
examples
in
those
repositories
like
vs
code
like
Lib,
get
to
that
I
linked
to
in
the
beginning
and
and
try
to
get
an
example
of
that
to
see
what
they're
doing
I
would
also
look
at
the
documentation.
That's
on
that's
on
the
I.
Don't
have
the
link
in
front
of
me,
but
it's
you
can
you
can
Bing
it
for
a
sure
pipelines,
yeah
Mille,
very.
C
There
is
so
out
of
the
box.
We
just
give
you
an
a
bunt
to
build
hosts
and
you
saw
like
with
cake
they
have
all
of
these
various
Linux
distributions
that
they're
using
sent
OS
debian
fedora
the
way
they're
doing
that
is
running
them
inside
a
docker
container.
That's
what
we
do
with
look
it's
who
as
well,
so
we
we
actually
have
docker
images
that
that
we
have
set
up,
and
so
our
build
is
actually
just
running
inside
a
docker
image.
A
So
that's
really
cool
that
you're
still
running
the
same
process,
but
they're
choosing
the
different
operating
systems
just
by
choosing
an
appropriate
docker
container
to
go
along
with
that.
So
yeah,
that's
exactly
right!
So
it
is
it
possible
to
run
pipelines
locally
like
Jenkins,
or
is
this
strictly
an
azure
thing.
C
So
yeah,
what
I
don't
have
in
front
of
me,
unfortunately,
is
my
handy
Raspberry
Pi.
So
I
mentioned
that
we
want
to
have
a
number
of
platforms
running
for
for
various
things,
and
so
we
can
look
at
some
on-premises
build
agents.
It's
a
it's
a
dotnet
core
application.
Our
build
agent
is
so
anywhere
dotnet
core
runs
and
that's
a
lot
of
places.
C
You
can
run
our
build
agent,
so
I
started
forwarding
it
over
to
Raspberry
Pi,
for
instance,
so
I
have
a
little
Raspberry
Pi
that
I
can
plug
in
I
can
set
up
a
build
agent.
I
don't
have
to
use
these
as
your
hosted
ones.
I
can
set
up
my
own
build
pool
with
on-premises
machines.
It's
especially
important.
If
you
know
you
have
really
complicated
dependencies
that
maybe
you
need
inside
your
firewall,
totally
happens,
I
get
it,
and
so
that's
that's
a
way
to
a
way
to
do
that,
you
can
actually
mix
and
match
as
well.
A
C
Interesting
so
I
always
I
always
struggle
with
the
definition
of
an
integration
test
and
because
I
I
feel,
like
these
terms,
mean
various
things
to
various
people,
or
it
might
just
be
that
I'm
really
ignorant
about
it.
I'm
not
it
could
or
both
could
be
both.
So,
yes,
I
I
think
that
one
of
the
things
that
you
can
do
is
you
can
leverage
the
azure
test
plans
as
your
test
plans
are
another
part
of
Azure
DevOps
that
allow
for
richer
test
integration,
and
even
you
know,
manual
testing.
C
The
other
thing
that
you
can
do
is
add
gates
within
your
within
your
pipeline.
So
maybe
not,
maybe
it's
not
something
you
would
want
to
do
as
part
of
the
build,
but
you
would
start
to
think
about
having
release
gates,
as
you
were,
getting
ready
to
deploy
an
application,
and
so
you
can
actually
stop
the
or
pause
rather
the
deployment
at
a
gate
and
wait
for
something
to
satisfy
that,
because
that
could
be
a
manual
test.
C
So
maybe
you
deploy
to
a
staging
server,
and
then
you
have
a
gate
that
somebody
has
to
approve
manually
to
move
from
staging
to
production.
You
can
also
have
automatic
gates,
so
you
know
they
could
run
a
an
application.
They
could
hit
a
rest
in
point.
They
could
run
an
azure
function
and
you
know
we've
seen
some
really
clever
things
there.
Somebody
set
up
Twitter
sentiment
analysis,
so
you
can
start
staging
a
deployment.
You
can
roll
it
out
slowly.
C
If
you're,
seeing
on
Twitter
that
you're
blowing
up
with
people
saying
oh,
what's
going
on
everything's
slow,
then
you
can
actually
stop
that
gate
to
keep
it
from
deploying
further.
So
you
get
sort
of
ring
the
deployment
or
canary
deployment
with
some
sort
of
automation.
It's
incredibly
clever.
That
is.
C
Go
back
to
my
pull
request
Oh.
Indeed,
there
was
a
build
failure
which
we
expected.
We
changed
that
test
to
be
totally
invalid.
Nothing
wrong
with
that
this.
This
absolutely
happened
when
you
get
started
contributing
to
an
open-source
project.
Sometimes
things
aren't
exactly
as
you
expect
them
to
be.
You
know.
Sometimes
code
is
dense.
Maybe
it's
not
commented
very
well.
I
know
I'm
guilty
of
that,
sometimes
when
I
work
on
open
source.
C
So
if
you
somebody
were
to
come
in
and
pick
this
up,
they
might
not
exactly
understand
what
I
had
in
mind,
because
I
hadn't
commented
it
very
well
right.
So
it's
it's
totally
valid
that
you're.
Your
first
contribution
to
an
open-source
project
might
not
build
and
tests
might
not
pass,
and
this
is
an
example
of
that.
But
the
nice
thing
is
that
the
combination
of
github
and
Azure
pipelines
has
notified
me
of
that
as
a
maintainer
and
I
can't
even
click
that
merge
pull
request
button
because
that
we
required
that
that
status
must
pass.
C
C
C
Despite
the
name,
you
know
it's
not
DevOps
in
a
box
adopting
this
won't
make
you
suddenly
successful
with
a
DevOps
workflow,
but
it
will
provide
you
the
tools
to
help
you
get
there.
As
my
buddy
Donovan
says,
DevOps
is
the
people
process
and
products
to
deliver
continuous
integration
of
continuous
delivery
of
value
to
our
customers.
We
can
help
you
with
the
products,
so
we're
very
excited
about
this.
Thank
you
so
much
for
taking
the
time.
Thank
you
to
dotnet
conf,
very
excited
to
be
here.
C
A
Awesome
thanks
so
much
and
it
was
really
great
to
have
you
join
us
as
part
of
the
event.
Yeah.
Absolutely
reach
make
sure
you
reach
out
to
them.
If
you
have
any
questions,
of
course,
this
video
will
be
archived
it'll
be
available
over
on
YouTube
later
and
we're
gonna
be
rerunning
all
of
dotnet
conf
all
weekend
long.
So
thank
you
so
much
for
joining
us.
That
was
really
great
stuff.